0

それぞれのコントローラーとビューを持つ 2 つのモデルがあります:ProfileComment.

私のアプリケーションのビュー全体 (Web ページ全体) はProfile show.html.erb. このページで、ユーザーはコメントを作成できる必要がありbelongs_toますProfile

/comments/new標準ページに移動せずにこれを行うにはどうすればよいでしょうか?

編集: Railsガイドに従った後、実装しました:

<%= simple_form_for([@profile, @profile.comment.build], html: {class: "form-inline"}) do |f| %>
  <%= f.error_notification %>

  <%= f.input :description, label: false, placeholder: 'Create an comment', input_html: { class: "span4" } %>
  <%= f.submit 'Submit', class: 'btn btn-small'%>

<% end %>

コメントコントローラー

 def create
  @profile = profile.find(params[:profile_id])
  @comment = @profile.comments.create(params[:comment])
  redirect_to profile_path(@profile)

そして、私はこのエラーが発生しています:

undefined method `comment' for #<Profile:

修正:ビルド ステートメントでは、コメントは複数形にする必要がありました

@profile.comments.build
4

2 に答える 2

1

コメント フォームのコードを profile#show に追加するだけです。次に、profile_controller の show アクションで次のようにします。

def show
 @comment = Comment.new
end

コメントコントローラーに次を追加します。

def create
 @comment = Comment.create(params[:comment])
end
于 2013-03-22T15:36:09.303 に答える
0

フォームを保存し、AJAX 呼び出しやKnockoutなどを使用してページを更新することを検討してください。したがって、profiles/show.html.erb で、コメントを投稿するためだけに通常の (別の) フォームを作成します。jQuery などを使用して、AJAX 経由でフォームを /comments に投稿すると、コメント コントローラーで作成アクションが実行されます。そのコントローラーに、保存されたコメント、または {:fieldname => 'too long'} のようなエラー メッセージのハッシュである JSON 応答を返させます。

クライアントで、json 応答を解析し、保存されたコメントを表示するか、保存できなかった理由を説明するエラー メッセージを表示します。これらはすべて単純な jQuery で行うことができますが、Knockout のようなものを追加すると、すべてが少し簡単になります。

于 2013-03-22T16:00:57.173 に答える