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ディレクトリを確認し、この部分があるかどうかを確認してください。ネストされたリソースを見ると、 と の関係は次のように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.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 がありません

.new2) また、アクション内で a を呼び出していますindex

これで問題が解決することを願っています。

于 2013-05-31T12:08:33.583 に答える