【问题标题】:Rails 3.2 conditionally set nested form field valueRails 3.2有条件地设置嵌套表单字段值
【发布时间】:2014-12-27 22:48:02
【问题描述】:

我正在建立一个音乐专辑评论网站。我有以下模型(与这篇文章相关):

  • 专辑
  • 艺术家
  • 审核
  • 用户

  • 艺人有很多专辑

  • 相册有很多评论
  • 用户有很多评论

我的表单设置正确,并且评论字段被拉入专辑表单。一切都正确写入数据库,但我有一个问题:如果是新评论,如何将 user_id 字段动态设置为 current_user.id (只有用户可以创建评论,用户只能是管理员,所以会有2-3 人),但如果它是在前往专辑#edit 时填充的现有评论,请保留该字段?

现在我有:

<div class="field">
  <%= f.number_field :user_id, value: current_user.id %>
</div>
<div class="field">
  <%= f.label :content %><br />
  <%= f.text_area :content %>
</div>

与其他字段一起,这适用于新评论,因为该 user_id 字段填充了 current_user.id 值。但是,当我去编辑相册时,如果我手动将 user_id 值更改为其他值,保存,返回并再次编辑,它会重置为我的 user.id 值(在这种情况下为 1)。

现在,在相册表单本身上,我只需使用

if @album.new_record? ... end

声明要么使用 current_user.id 预填充隐藏字段,要么对现有记录不做任何事情,因为我不希望它改变。

但我不知道如何为嵌套字段做同样的事情,并且无法通过谷歌搜索找到任何内容。我试过使用 f、builder、review、@review、self a 并且都导致 nil:nilClass 错误。那么我怎样才能为嵌套的评论字段完成同样的事情呢?

if nested_review.new_record?
  user_id = current_user.id
else
  user_id
end

我真的希望这是一件简单的事情,因为我只是在俯瞰。应该是这样的。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 nested-forms


    【解决方案1】:

    您可以通过f.object 访问现有的user_id

    以下内容应该可以帮助您完成您想要的:

    <%= f.number_field :user_id, value: (f.object.user_id || current_user.id) %>
    

    不知道您为什么将其设为可编辑字段。应该是隐藏的吧。

    【讨论】:

    • 是的!这正是我所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多