2

私のルートファイルは次のようになります。

scope :locslug/:userslug do  
....
....

post 'rate/:stars' => 'articles#rate' :as => :rate_article
end

記事のレートアクションを対象とするアクションを含むフォームを生成しようとしています。理想的には、フォームが送信されると、評価が作成または更新されます。他の場所では、記事に has_many の評価があります。

これは機能しません:

= form_tag rate_article_path, :method=>'post', :id => "rate_article" do
  =hidden_field_tag :article_id, @article.id
  =hidden_field_tag :stars, 0
  =hiden_field_tag :user, current_user.id

助けていただければ幸いです。ありがとうございました。

4

1 に答える 1

1

rails で何らかのエラーが表示されますか? ルートが間違っていると思います:「rate/:stars」は、rate_article_path を呼び出すときにパラメーターを期待するように Rails に指示します (5 つ星の場合は、rate_article_path(5) に何かリンクします)。

ルートが必要です:

post 'rate/:article_id' => 'articles#rate' :as => :rate_article

あなたのフォーム:

= form_tag rate_article_path(@article), :method=>'post', :id => "rate_article" do
  =hidden_field_tag :stars, 0

今あなたのコントローラーに

def rate
  article = Article.find(params[:article_id])
  article.rates.create(:user => current_user, :stars => params[:stars])
end

(これは非常に単純化されています。いくつかの検証を行う必要があります。これは、何をすべきかを理解するためのものです)

于 2012-07-03T20:08:23.360 に答える