【问题标题】:Ruby on Rails - Nested FormRuby on Rails - 嵌套表单
【发布时间】:2012-09-18 10:21:34
【问题描述】:

我的应用中有用户投注比赛。单次投注称为“tipp”。

我有以下(工作)表格,用户可以在其中编辑他们的赌注:

<%= form_for @user, :url => { :action => "update_tipps" }  do |user_form| %>

    <%= user_form.fields_for :tipps do |tipp_form, index| %>
        <%= tipp_form.text_field :tipp1 %><br/>
        <%= tipp_form.text_field :tipp2 %><br/>         
    <% end %>

    <%= submit_or_cancel(user_form) %> 
<% end %>

使用此表格,用户可以一次编辑他的所有投注/提示。

我的问题:

如何指定用户可以编辑的提示?我不希望用户得到他所有投注的列表,而只是他投注的一个子集。

例如这样:

<%= user_form.fields_for :tipps.where("match_id = ?", 5) do |tipp_form, index| %>
    <%= tipp_form.text_field :tipp1 %><br/>
    <%= tipp_form.text_field :tipp2 %><br/>         
<% end %>

这会将投注减少到对 ID 为 5 的比赛的投注。但是此代码不起作用。

解决这个问题的正确方法是什么?提前致谢。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我现在还没有测试过,但是你应该可以将对象传递给fields_for,这样的东西应该可以工作:

    <% user_form.object.tipps.where("match_id = ?", 5).each do |tipp| %>
      <%= user_form.fields_for :tipps, tipp do |tipp_form, index| %>
        <%= tipp_form.text_field :tipp1 %><br/>
        <%= tipp_form.text_field :tipp2 %><br/>         
      <% end %>
    <% end %>
    

    当然你应该重构它,因为像这样的过滤(低级搜索方法)在视图中是难闻的,但你终于可以开始玩了。

    http://api.rubyonrails.org有描述,在ActionView::Helpers::FormHelper中搜索fields_for方法,在嵌套属性示例中描述一对多关系。

    【讨论】:

    • 您的建议有效,谢谢!我会开始玩弄它。在接受您的回答之前,我会稍等片刻,看看能否得到更多答案。
    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多