gpt4 book ai didi

ruby-on-rails-4 - 如何将 has_many 关系与 select 一起使用?

转载 作者:行者123 更新时间:2023-12-04 00:40:39 25 4
gpt4 key购买 nike

给定问题观察者模型:

class Problem < ActiveRecord::Base
has_many :observers
accepts_nested_attributes_for :observers
end

class Observer < ActiveRecord::Base
belongs_to :problem
belongs_to :user
end

我正在尝试使用 form_for 选择用户作为观察者:

        <%= f.fields_for :observers do |obs| %>
<%= obs.collection_select(:user_id, Users.to_a, :id, :name, {:include_blank => true, include_hidden: false}, {:multiple => true}) %>
<% end %>

然而,Rails 为选择生成了错误的名称:problem[observers_attributes][0][user_id][],因此即使为 strong_params ({:observers_attributes => [{: user_id => []}]}) 它创建了错误的关系,只有 problem_id 进入数据库,所有 user_id 都被忽略。

我想做的是在多个选择中显示所有用户,抓取 ID 并在 Problem#new 方法中为他们创建关联。

更新 12.10

发布参数:

参数:{"utf8"=>"✓", "authenticity_token"=>"NHDl/hrrFgATQOoz9A3OLbLDAbTMziKMQW9X1y2E8Ek=", "problem"=>{"problem_data_attributes"=>{"title"=>"safasfasfafsasf", "description"=>""}, "observers_attributes"=>{"0"=>{"user_id"=>["5", "8"]}}}}

强参数:

def problem_params
params.require(:problem).permit({:files_attributes => [:attach_id]}, {:observers_attributes => {:user_id => []}}, {:problem_data_attributes => [:title, :description]})
end

创建方法

def create
@problem = @project.problem.build(problem_params)
@problem.account = current_account

if @problem.save
render :json => {status: true, id: @problem.id}
else
respond_with(@problem)
end
end

以及在创建调用期间创建观察者的 SQL:

SQL (0.2ms)  INSERT INTO `observers` (`problem_id`) VALUES (96)

最佳答案

在您这样做的方式中,您是在说您只想要一个具有多个 user_id 的观察者,而实际上您想要的是每个用户(和问题)一个观察者。

您可能应该使用这样的关联模型:http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association

请记住按字母顺序创建关联,在您的案例模型 ProblemUser 和表 problems_users 中。

然后,您可以像这里一样填写表格:https://stackoverflow.com/a/9917006/1217298 – 请阅读问题和答案以更好地理解。

希望对您有所帮助。

关于ruby-on-rails-4 - 如何将 has_many 关系与 select 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19136099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com