【问题标题】:Rails 4: How can I get the value[id] of a selected item with collection_select in my formRails 4:如何在我的表单中使用 collection_select 获取所选项目的值 [id]
【发布时间】:2015-01-09 21:16:08
【问题描述】:

在我的控制器中,我想做以下事情:

class SubsController < ApplicationController

 def push_sub
    @sub = Sub.find(params[:id])
    @food = Food.find("ID of food selected from collection_select") => see my form down below
    @food.subs << @sub
  end

  private

    def sub_params
      params.require(:sub).permit(:name, :description)
    end
end

@food.subs 例如返回一个 ActiveRecord::Associations::CollectionProxy :

 => #<ActiveRecord::Associations::CollectionProxy [#<Sub id: 34, name: "Fake choco", description: "cacao fake", created_at: "2015-01-07 23:40:25", updated_at: "2015-01-07 23:40:25">, #<Sub id: 34, name: "Fake choco", description: "cacao fake", created_at: "2015-01-07 23:40:25", updated_at: "2015-01-07 23:40:25">, #<Sub id: 34, name: "Fake choco", description: "cacao fake", created_at: "2015-01-07 23:40:25", updated_at: "2015-01-07 23:40:25">]> 

在我的表单中单击 f.submit 时,它会触发 push_sub 操作,该操作会将新的 @sub 推送到所选项目 (@food) 的关联中。

我不知道如何在我的表单中获取所选食物的 ID,以便我可以在我的控制器中使用它。

这是我的表格:

<%= form_for @sub, :url => {:action => "push_sub"} do |f| %>

  <h1>What food is <%="#{@sub.name}"%> a substitute of?</h1>

  <div class="field">
    <%=collection_select(:sub, :foods, Food.all, :id, :name)%>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

非常感谢您的帮助。

祝大家新年快乐!

安东尼

更新

我有 3 个具有 has_many through 关系的模型:Food(例如:Chocolate)、Sub(巧克力食品替代品)、Joint(联合表)。

class Food < ActiveRecord::Base
    has_many :joints
    has_many :subs, :through => :joints
    accepts_nested_attributes_for :subs, reject_if: :all_blank, allow_destroy: true
end
class Sub < ActiveRecord::Base
    has_many :joints
    has_many :foods, :through => :joints
    accepts_nested_attributes_for :foods, reject_if: :all_blank, allow_destroy: true
end
class Joint < ActiveRecord::Base
    belongs_to :food
    belongs_to :sub
end

【问题讨论】:

  • 食物和替代品有什么关系?
  • 感谢您的宝贵时间,我用我的模型更新了我的问题。

标签: ruby-on-rails-4 associations nested-forms collection-select


【解决方案1】:

我找到了答案:

我可以像这样遍历控制器中的参数:

   params[:sub].each do |k, v|
      @food_id = v
    end

所以我可以使用 @food_id 将 Sub 推送到其活动记录集合代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2016-01-10
    • 2014-01-02
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多