我正在嵌套资源上实现祖先。
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
目录,并检查您是否有这个部分。根据您的嵌套资源,我猜您在Load
和Message
之间的关联是:
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
。
希望这能让你明白。