2

我已经使用railscasts实现了嵌套属性,并且我在应用程序中使用了设计。这是简单的结构。

我有两个模型,即 Group 和 Invite。

组模型有

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 存储在邀请表中,但我可以在邀请模型中访问 c​​urrent_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.

所以,你可以写这样的东西(基于 Railscasts):

# /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:

要记住的一件重要事情是,它不会隐藏在源代码中,并且可以被邪恶的用户修改,因此隐藏字段中的所有输入都应被视为不可信并像可见字段一样进行检查。

参考:

于 2012-11-18T00:46:56.377 回答