0

私は現在、ユーザーのステータスと、これらの像に対するコメントのサポートを含むアプリケーションを持っています。各ステータスの下にコメント フォームを表示することを決定するまで、すべてが正常に機能していました。私の create.js.erb は、送信が成功した後、新しく作成されたステータスをユーザーのフィードに追加します。これが私のコードです:

このコードは個々のステータスをレンダリングし、shared/feed_item にあります。

<li id="<%= feed_item.id %>" class="block">
  <%= feed_item.content %>
  <%= render 'shared/feed_comment_form', object: feed_item %> //works fine without this line
</li>

ステータス用の私の create.js.erb

<% if @status.errors.any? %>
    $("#new_status").replaceWith("<%= escape_javascript(render('shared/status_form')) %>");
<% else %>
    $("<%= escape_javascript(render('shared/feed_item', feed_item: @status)) %>").hide().prependTo('.feed').fadeIn(1000);
<% end %>

共有/feed_comment_form

<%= form_for([object, @comment], :remote => true) do |f| %>
  <%= render 'shared/error_messages_short', object: @comment %>
  <div class="field">
    <%= f.text_area :content, placeholder: "Enter comment...", rows: 1 %>
  </div>
  <%= f.submit "Post", class: "status-btn", id: "status_submit_#{object.id}" %>
<% end %>

これがエラーです

Rendered statuses/create.js.erb (9.4ms)
Completed 500 Internal Server Error in 21ms

ActionView::Template::Error (undefined method `model_name' for NilClass:Class):
    1: <%= form_for([object, @comment], :remote => true) do |f| %>
    2:   <%= render 'shared/error_messages_short', object: @comment %>
    3:   <div class="field">
    4:     <%= f.text_area :content, placeholder: "Enter comment...", rows: 1 %>
  app/views/shared/_feed_comment_form.html.erb:1:in `_app_views_shared__feed_comment_form_html_erb__4480113129845938771_70094779148500'
  app/views/shared/_feed_item.html.erb:24:in `_app_views_shared__feed_item_html_erb___2728444254186520065_70094807848760'
  app/views/statuses/create.js.erb:4:in `_app_views_statuses_create_js_erb__3125686809617511276_70094769988780'
  app/controllers/statuses_controller.rb:6:in `create'

shared/feed_item で「feed_item」を渡しているため、変数「object」が null である理由がわかりません

どんな助けでも大歓迎です。

4

1 に答える 1

0

@comment は実際には nil であり、'object' ではないことがわかりました。コントローラーから @comment を渡していましたが、ajax を介してレンダーに渡されていないと思います。@comment を Comment.new に変更する必要がありました。これが最善の解決策かどうかわからない

于 2012-09-24T03:19:13.260 に答える