在嵌套资源上实现祖先会抛出错误



我正在嵌套资源上实现祖先。

resources :loads do
  resources :messages
end

这是我的索引操作

def index
  load = Load.find(params[:load_id])
  @messages = load.messages.scoped
  @message = load.messages.new
end

My index.html.erb抛出以下错误。

缺少部分消息/消息{:locale=>[:en],:格式=> (html)::处理程序=> [:erb: builder,:咖啡]}。搜索:*"C:/网站/最后/云/app/视图"

我的index.html.erb如下

<% title "Messages" %>
<%= nested_messages @messages.arrange(:order => :created_at) %>
<%= render "form" %>

这是我的nested_message定义

module MessagesHelper
  def nested_messages(messages)
  messages.map do |message, sub_messages|
  render(message) + content_tag(:div, nested_messages(sub_messages), :class => "nested_messages")
   end.join.html_safe
  end
end

这里是我的_message.html.erb

<div class="message">
<div class="created_at"><%= message.created_at.strftime("%B %d, %Y") %></div>
<div class="content">
 <%= link_to message.content, message %>
</div>
<div class="actions">
<%= link_to "Reply", new_load_message_url(:parent_id => message) %> |
<%= link_to "Destroy", [message.load, message], :confirm => "Are you sure?", :method => :delete %>
</div>
</div>

感谢任何帮助。

此错误表明您的应用程序已尝试搜索部分_messages.html。动词,因此,部分不能在您的/app/views/messages中,这导致您正在显示的消息。检查您的messages目录,并检查您是否有这个部分。根据您的嵌套资源,我猜您在LoadMessage之间的关联是:

class Load < ActiveRecord::Base
  has_many :messages
end
class Message < ActiveRecord::Base
  belongs_to :load
end

进一步,我注意到你有以下行在你的index行动:@message = load.messages.new当然这似乎不正确。因为你告诉你的应用程序要做的是当控制器收到一个响应来渲染index动作时,它也应该通过做@message = load.messages.new来创建消息,这就是为什么它试图渲染部分。

为你澄清一些事情。如果在您的应用程序中有一个link_to来创建一个新用户。在单击新用户时,它将执行如下操作:

  def new
    @user = User.new
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @user }
    end
  end

将呈现' app/views/users/new.html。动词里面很可能有一个

<%= form_for @user do |f| %>
  <%= render :partial => 'form', :locals => { :f => f } %>
<% end %>

这将调用您的部分,在正常情况下是_form.html.erb。当您尝试保存部分时,特定控制器的create操作将发挥作用。通常控制器的create块是这样的:

 def create
    @title = "Create a user"
    @user = User.new(params[:user])
    if @user.save
      redirect_to usermanagement_path
      flash[:success] = "Created successfully."
    else
      @title = "Create a user"
      render 'new'
    end
  end

create操作中,当您的_form.html.erb_message.html.erb提交时,它将尝试通过params传递用户来创建新用户。我完全相信你的问题可能是:

1)你错过了你的_message.html.erb

2)你也在你的index动作中调用.new

希望这能让你明白。

相关内容

  • 没有找到相关文章

最新更新