2

railscastsを使用してネストされた属性を実装し、アプリケーションでdeviseを使用しています。これが単純な構造です。

GroupとInviteの2つのモデルがあります。

グループモデルは

accepts_nested_attributes_for :invites, :reject_if => lambda { |a| a[:email].blank? }, :allow_destroy => true

そしてそれは完全にうまく機能します。これがパラメータのハッシュです。

 Parameters: {"utf8"=>"✓", "authenticity_token"=>"uI0HmJrIE9Qh3pZW2qIJymeON/yjbFSgcH8bRx/x5Oo=", "group"=>{"name"=>"Test Group", "description"=>"", "invites_attributes"=>{"0"=>{"name"=>"Test User", "email"=>"test@example.com", "_destroy"=>"false"}}}, "commit"=>"Create Group"}

ここで問題となるのは、招待者user_idを招待テーブルに保存したいのですが、招待モデルでcurrent_userにアクセスできます。では、招待モデルにcurrent_user idを保存するために、ハッシュを変更するにはどうすればよいですか。

基本的に、ハッシュパラメータが次の場合は簡単です。

 Parameters: {"utf8"=>"✓", "authenticity_token"=>"uI0HmJrIE9Qh3pZW2qIJymeON/yjbFSgcH8bRx/x5Oo=", "group"=>{"name"=>"Test Group", "description"=>"", "invites_attributes"=>{"0"=>{"name"=>"Test User", "email"=>"test@example.com", "_destroy"=>"false", :invited_by => "1" }}}, "commit"=>"Create Group"}

コントローラ側でハッシュを変更するにはどうすればよいですか?またはこれを達成するためのより良い方法がありますか。

4

1 に答える 1

0

たぶんあなたはを使ってみることができますhidden_field

したがって、次のように書くことができます(Railscastに基づく):

# /app/views/surveys/_question_fields.html.erb
<div class="fields">
  <p>
    <%= f.hidden_field :user_id, :value => "1" %>
    <%= f.label :content, "Question" %>
    <%= link_to_remove_fields "remove", f %><br />
    <%= f.text_area :content, :rows => 3 %><br />
  </p>
  <% f.fields_for :answers do |builder| %>
    <%= render 'answer_fields', :f => builder %>
  <% end %>
  <p><%= link_to_add_fields "Add Answer", f, :answers %></p>
</div>

APIdockから:

覚えておくべき重要なことの1つは、これはソースコードに隠されておらず、悪意のあるユーザーによって変更される可能性があるため、隠しフィールドへのすべての入力は信頼できないと見なし、可視フィールドと同じようにチェックする必要があることです。

参照:

于 2012-11-18T00:46:56.377 に答える