我有一个form_for
rails视图,其设置如下:
= form_for :school_application, html: {id: :school_app } ,class: 'school_application' do |f|
我有一个相关的模型,我填写在这个名为" program"的表格上。我想根据用户输入的程序参数的内容,在同一表单的另一部分中找到程序模型的Id,如下所示:
= f.label :program
= f.select(:program, Program.all.map{|p| [p.name, p.id]}, prompt: "Select a Program", selected:@school_application.program)
问题是我只能通过执行以下操作来引用程序名称的字符串版本:
:program
哪个正确代表了正确的programInstance.name
属性。但是,一旦选择了程序,我想在同一form_for
内捕获此相关模型的id。我知道它在某处,因为当我提交表单时,我的Rails输出给了我:
Started POST "/application/new" for 127.0.0.1 at 2017-11-26 16:30:18 -0800
Processing by SchoolApplicationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>, "school_application"=>
{"family_name"=>"", "first_name"=>"", "address"=>"", "address_2"=>"",
"city_state_province"=>"", "state_province"=>"", "postal_code"=>"",
"country"=>"", "phone_number"=>"", "fax_number"=>"", "email"=>"",
"gender"=>"", "date_of_birth"=>"", "country_of_citizenship"=>"",
"country_of_birth"=>"", "program"=>"2"}}
所以我知道它在那里。有人知道如何在.html.erb表单中访问它吗?
以下是我尝试以下列形式访问该程序的方法:
- if not params.nil? and not params['school_application'].nil? and Program.find(params['school_application']['program']).study_thirty_plus
= f.label :study_thirty_plus
= f.check_box :study_thirty_plus
params
不起作用,@program
也不起作用。只有:program
会保留正确的名称,但由于它是一个符号,因此它没有属性.id
我可以这样做,但这是一个脆弱的解决方案,因为它假定程序名称始终是唯一的:
- if not :program.nil? and not Program.find_by_name(:program).nil? and Program.find_by_name(:program).study_thirty_plus
= f.label :study_thirty_plus
= f.check_box :study_thirty_plus
答案 0 :(得分:0)
我的临时解决方案实际上根本就没有解决方案,因为我正在处理一个数据集,其中Program
实例实际上被命名为program
,因此Program.find_By_name(:program)
在我的情况下工作。经过进一步的研究后,我意识到我不应该尝试使用这样的rails做反应性的UI,但应该使用jQuery或其他一些javascript库来监听DOM中的更改,然后在.onChange()
中调用rake端点阻止查看程序是否为study_thirty_plus
。
这也可能是一个参考: How to assign a variable the current output of a select tag