1

これを使用して、ユーザーがエントリに投票できるようにします。

 <% form_tag url_for(entry_votes_path(@entry)), :id => 'voting_form', :remote => true do %>
      <%= hidden_field_tag 'vote[user_id]', current_user.id  %>
      <%= submit_tag 'Vote for this entry', :id => 'voting_button' %>
 <% end %>

これは私のコントローラコードです:

def create
    @entry = Entry.find(params[:entry_id])
    @vote = @entry.votes.build(params[:vote])

    respond_to do |format|
    if @vote.save
        format.html { redirect_to @entry }
        format.js
      end
    end
  end

2つの質問があります

  1. current_user.id非表示フィールドを使用せず に割り当てるにはどうすればよいですか?

  2. また、私は現在 Vote モデルを使用していattr_accessibleません。attr_protected誰かが大量の投票を作成できないようにするには、モデルをどのように保護すればよいですか? 現在、Vote モデルのすべてのフィールドはparamsハッシュによって設定されていますattr_protected。たとえば、entry_id外部キーを使用して、コントローラーで個別に設定する必要がありますか?

4

1 に答える 1

2

現在、Vote モデルで attr_accessible または attr_protected を使用していません...

次に、定義により、クエリ文字列から一括割り当てが可能です。

たとえば、entry_id外部キーでattr_protectedを使用してから、コントローラーで個別に設定する必要がありますか?

一般に、attr_protected より attr_accessible を使用する方が適切です。これは、attr_accessible が一括割り当てに対するすべて拒否のデフォルトを確立し、ホワイトリストに登録された例外を定義できるようにするためです。一方、attr_protected では、特定の属性をブラックリストに登録する必要があります。プログラムを変更し、attr_accessible を設定して新しい属性を追加すると、属性をホワイトリストに登録して忘れる必要がある場合、プログラムは失敗します。つまり、安全に失敗します。または、attr_protected セットを使用して新しい属性を追加すると、新しい属性がblacklist に含まれている必要がある場合でも、プログラムは機能します。言い換えれば、安全に失敗します。

ここでのルールは、クエリ文字列からの設定を許可すると危険な属性を保護することです。キーを保護すると、新しい行の挿入を防ぐことができますが、既存の行の内容を変更できないようにする場合は、他のフィールドを保護する必要がある場合があります。

これに関する参考文献は、guides.rubyonrails.orgにあります。

于 2011-02-01T05:26:15.313 に答える