0

問題があります、それは私を悩ませています。私はこの「Ruby on Rails」-Ajax化された評価システムを実装するためのチュートリアル http://eighty-b.tumblr.com/post/1569674815/creating-an-ajaxified-star-rating-system-in-rails-に従っています- 3

著者は、「rating_ballot」と呼ばれる自己記述ヘルパー メソッドを使用しています。これは、評価がまだ与えられているかどうかをチェックし、そうでない場合は新しいものを

    current_user.ratings.new

しかし、それは実際には評価コントローラーで多かれ少なかれ行われています

このヘルパー メソッドを使用すると、フォームは次のようになります。

= form_for(rating_ballot, :html => { :class => 'rating_ballot' }) do |f|

ただし、他のフォーム (レビューの投稿など) では、ヘルパー メソッドの代わりにインスタンス変数が使用されます。

form_for タグをこのようにしたい

= form_for(@rating, :html => { :class => 'rating_ballot' }) do |f|

ただし、これは評価の更新にのみ機能し、新しい評価の作成には機能しません。

この「rating_ballot」がなぜそれほど重要なのですか?

4

2 に答える 2

0

その部分を見てください

def rating_ballot
    if @rating = current_user.ratings.find_by_photo_id(params[:id])
        @rating
    else
        current_user.ratings.new
    end
end

存在する場合は @rating を見つけようとし、存在しない場合は新しいインスタンスを作成しようとします

たとえば、コントローラーでそれを行うことができます:

 @rating = current_user.ratings.find_by_photo_id(params[:id])
 @rating ||= current_user.ratings.new # create instance if did not find existing once

ansは、あなたが書いたような形でそれを使用します

于 2013-05-20T11:13:01.757 に答える
0

@ratingの値が nil であると推測しているため、このフォームを#createアクションに使用しても機能しません。最初の引数はnew、それぞれ作成または更新するために、オブジェクト、または既存のレコードを表すオブジェクトである必要があります。

このメソッドを使用するもう 1 つのform_for方法は、クラスの名前を表すシンボルを指定し:url、ルートの指定方法に従って引数を指定することです。ただし、シンボルは既存のレコードを表していないため、これは作成にのみ適しています。

于 2013-05-20T11:15:06.700 に答える