2013-05-31 35 views
0

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

resources :loads do 
    resources :messages 
end 

这里是我的索引行动

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

我index.html.erb抛出下面的错误。

缺少部分信息/消息与{:区域设置=> [:烯], :格式=> [:HTML]:处理程序=> [:ERB,:助洗剂,:咖啡]}。搜查: * “C:/网站/最后的/云/应用/视图”

我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> 

任何帮助赞赏。

回答

0

此错误指出您的应用程序试图搜索部分_messages.html.erb,因此部分内容不得在您的/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 

而且会呈现'应用程序/视图/用户/ new.html.erb其中这里面最有可能有一个

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

这将打电话给你的部分,在正常情况下,将是_form.html.erb。当您尝试保存部分时,特定控制器的创建操作将发挥作用。通常一个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 

这里,当你_form.html.erb_message.html.erb提交它会尝试通过传递用户通过params创建一个新用户的create行动中。我彻底相信,您的问题可能会潜在地不失为:

1)你缺少你_message.html.erb

2)你也是调用.newindex行动中。

希望能为你解决这个问题。

+0

嗨大卫。感谢您的详细回复。我的模型中有一个_message.html.erb。我正在编辑我的帖子以包含此内容。我也尝试评论.new内部索引操作,但我得到了同样的错误 – user2297820

+0

@ user2297820另一件我刚才注意到的代码片段中提到的我没有看到你在调用'<%= render“消息的位置” %>'也可以尝试将扩展名显式添加到'<%= render:partial =>“messages/_message.html.erb”'。你会发现在你的'index.html.erb'里面你调用了'<%= render“形式”%>'我相信你想''%= render“message”%>'如果我站得正确 – David

+0

Thanks for all反馈家伙。真的很感激它。它正在工作。我的部分名称是_messages.html.erb而不是_message.html.erb。再一次真的很感谢你的帮助。 – user2297820