0

だから私は投稿とコメントのあるかなり典型的なブログアプリケーションを持っています。

各コメントは1つの投稿に属します投稿には多くのコメントを含めることができます。

基本的に、コメントモデルのattr_accessibleの下にpost_idを設定せずに、投稿の表示アクションにコメントのフォームを追加したいと思います。

私の投稿コントローラーには次のものがあります。

def show
    @post = Post.find(params[:id])
    @poster = "#{current_user.name} #{current_user.surname} (#{current_user.email})"
    @comment = @post.comments.build( poster: @poster )
  end 

コメントコントローラーで何をすべきか完全にはわかりません(正直なところ、上記のコードが正しいかどうかはわかりません)。現時点で私は持っています:

 def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.build(params[:post])
  if @comment.save
    redirect_to @post, notice: "Comment posted"
  else
    redirect_to @post, error: "Error!"
  end
end

私のルート:

  resources :comments

  resources :posts do
    resources :comments
  end

そして最後にフォーム:

<%= form_for @post.comments.build do |f| %>
        <%= f.label :content, "WRITE COMMENT" %>
        <%= f.text_area :content, rows: 3 %>
        <%= f.hidden_field :post_id, value: @post.id %>
        <%= f.submit "Post" %>
    <% end %>

ここでの問題は、postsコントローラーのshowアクションからcommentsコントローラーのcreateアクションにpost_idを渡す方法がないことです。どんな助けでも大歓迎です。前もって感謝します!

4

3 に答える 3

4

投稿コントローラーは正常に見えます...しかし、ルートが次のようになっていると仮定します

resources :posts do
  resources :comments
end

その場合、CommentsController#createは次のようになります。

def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.build(params[:comment])
  if @comment.save
    redirect_to @post, notice: "Comment posted"
  else
    redirect_to @post, error: "Error!"
  end
end

そしてあなたのフォーム:

<%= form_for [@post, @comment] do |f| %>
    <%= f.hidden_field :poster, value: @poster %>
    <%= f.label :content, "WRITE COMMENT" %>
    <%= f.text_area :content, rows: 3 %>
    <%= f.submit "Post" %>
<% end %>
于 2012-07-23T18:22:53.780 に答える
0

ショーの投稿のURLは次のようになりますpost/show/(:id)
これで、コメントフォームに、値が。の非表示フィールドを配置できますparams[:id]

hidden_field(:post_id, :value => params[:id])

フォームを送信すると、非表示フィールドを使用してpost_idの値を取得できます。

def create
        @comment = Comment.new(params[:comment])
        @comment.post_id = params[:post_id]

        if @comment.save
          flash[:notice] = 'Comment posted.'
          redirect_to post_path(@comment.post_id)
        else
          flash[:notice] = "Error!"
          redirect_to post_path(@comment.post_id)
        end
    end
于 2012-07-23T18:20:03.740 に答える
0

私はあなたの投稿モデルにhas_manyコメントとコメントbelongs_topostがあると仮定します

ルートファイルであなたよりもあなたはこのようなことをすることができます

resources :posts do
  resources :comments
end

これにより、次のようなURLスキームが得られます

/ posts /:post_id / projects、コメントの親のpost_idを常に持つことができます

于 2012-07-23T18:24:12.693 に答える