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 抛出以下错误。

缺少带有 {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]} 的部分消息/消息。在以下位置搜索:*“C:/Sites/final/cloud/app/views”

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

任何帮助表示赞赏。

4

1 回答 1

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

并且会渲染 `app/views/users/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

create在您提交_form.html.erb或提交的操作内部,_message.html.erb它将尝试通过将用户传递给params. 我完全相信您的问题很可能是:

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

2)你也在.new你的index行动中打电话。

希望这可以为您解决这个问题。

于 2013-05-31T12:08:33.583 回答