0

「Topic」というモデルを親として、「Comment」というモデルを子として持っているとします。URL 'topics/show/35' で、このトピック ID#35 に属するすべてのコメントを見ることができます。

ログインしたユーザーがこのページに新しいコメントを投稿したい場合、topics_controller.rb に「comment_create」アクションを記述する必要がありますか? または、comments_controller.rb に 'create' アクションを記述して、このページから呼び出しますか? どれが通常の方法ですか??

comments_controller で「作成」アクションを呼び出した場合、どのようにビューに書き込んで渡すことができますか?

  1. コメントを追加する「モデル名」
  2. 「モデル ID 番号」
  3. 「コメント本文」

または、このようにアクションを個別に記述する必要がありますか?

controllers/comments_controller.rb

  def create_in_topic
   code here! to add new comment record that belongs to topic....
  end


  def create_in_user
   code here! to add new comment record that belongs to user....
  end

参考までに、コメント追加アクションは次のようになります。

  def create

   @topic = Topic.find(params[:topics][:id] )
   @user_who_commented = current_user 
   @comment = Comment.build_from( @topic, @user_who_commented.id, params[:topics][:body] )
   @comment.save
   redirect_to :back   
   flash[:notice] = "comment added!"

  end

が更新されました!!!

ビュー/トピック/show.html.erb

<table>
  <tr>
    <th>ID</th>
    <th>Title</th>
    <th>Body</th>
    <th>Subject</th>
    <th>Posted by</th>
    <th>Delete</th>
  </tr>

<% @topic.comment_threads.each do |comment| %>
  <tr>
    <td><%= comment.id %></td>
    <td><%= comment.title %></td>
    <td><%= comment.body %></td>
    <td><%= comment.subject %></td>
    <td><%= comment.user.user_profile.nickname if comment.user.user_profile %></td>
    <td> **Comment destroy method needed here!!!** </td>
    </tr>
<% end %>
</table>

<%=form_for :topics, url: url_for( :controller => :topics, :action => :add_comment ) do |f| %>

    <div class="field">
      <%= f.label :'comment' %><br />
      <%= f.text_field :body %>
    </div> 

    <%= f.hidden_field :id, :value => @topic.id %>

  <div class="actions">
    <%= f.submit %>

<% end %>

コントローラー/topics_controller.rb

  def add_comment
   @topic = Topic.find(params[:topics][:id] )
   @user_who_commented = current_user
   @comment = Comment.build_from( @topic, @user_who_commented.id, params[:topics][:body] )
   @comment.save
   redirect_to :back
   flash[:notice] = "comment added!"
  end
4

2 に答える 2

1

最も簡単な実装は、トピック コントローラーのアクション (例: add_comment) になると思います。ビューが TopicController#add_comment アクションを呼び出すと、すべてのトピック情報とコメント データが得られるので、そこから簡単にコメントをトピックに追加できます。

さらにサポートが必要な場合はお知らせください。フェデックス

于 2012-07-10T23:45:50.160 に答える
0

その宝石のせいでよくわかりませんが、次のようなことを試すことができます:

<%=form_for @topic, url: url_for( :controller => :topics, :action => :add_comment ) do |f| %>
    <table>
        <tr>
            <th>ID</th>
            <th>Title</th>
            <th>Body</th>
            <th>Subject</th>
            <th>Posted by</th>
            <th>Delete</th>
        </tr>

    <% @topic.comment_threads.each do |comment| %>
        <%= f.fields_for :comment_threads, comment do |comment_form| %>
            <tr>
                <td><%= comment.id %></td>
                <td><%= comment.title %></td>
                <td><%= comment.body %></td>
                <td><%= comment.subject %></td>
                <td><%= comment.user.user_profile.nickname if comment.user.user_profile %></td>
                <td>Delete? <%= comment_form.check_box :_destroy %></td>
            </tr>
        <% end %>
    <% end %>
    </table>


    <div class="field">
        <%= f.label :'comment' %><br />
        <%= f.text_field :body %>
    </div> 

    <%= f.hidden_field :id, :value => @topic.id %>

    <div class="actions">
        <%= f.submit %>
    </div>
<% end %>

それがあなたを助けるかどうか私に知らせてください!フェデックス

于 2012-07-11T06:25:36.893 に答える