Rails在create form_for中引用相关的模型id

时间:2017-11-27 00:51:04

标签: ruby-on-rails

我有一个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

1 个答案:

答案 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