使用form_for将params附加/更新到现有表单

时间:2013-04-15 17:00:37

标签: ruby-on-rails-3 twitter-bootstrap boolean form-for

相当新的铁轨,这意味着我相信我已经掌握了大部分基础知识,但绝对仍然是艺术的学生。

我想要完成的任务:使用form_for将params附加到现有表单。

所以,我需要找到现有表单的id,并使用JobsController将新哈希传递给此表单,以附加几列数据。

步骤是从select_box中选择作业编号,使用text_fields / check_boxes添加该作业的所有更改/注释,然后提交。使用的视图也是部分的,可在views / jobs中找到。

当前问题,尽管多次尝试,但是:
    覆盖默认的'post'方法 - 以下几种组合:method => 'put':action => update, :controller => :jobs

class Job < ActiveRecord::Base

attr_accessible :note, :twgid, :padd, :lnkbr, :txtwr, :datewr, :pinmiss, :headch,  :name, :nucopy, :minrend, :majrend, :lnkwr, :gmail, :hotmail, :aol, :outlook, :note, :linkwr

belongs_to :form
end


 JobsController: 

 ( scaffolded ) 


View: (jobs/_form.html.erb)

<%= form_for @job do |f| %>

   <fieldset> 
 <div class="form-horizontal">              
 <div class="control-group">
 <span class="control-label">
 <%= f.label :name, "TWGID" %></span>
 <%= f.select :name, options_from_collection_for_select(Job.all, :name, :name), :prompt =>  'Select' %>  
  </fieldset>
  <fieldset>
 <div class="control-group">
 <span class="control-label">
  <%= f.label :padd, "Add Padding?" %></span>
  <%= f.check_box :padd %>   
  <%= f.hidden_field, :updated, :value => '1' %>
  <% end %>

##路线##

get 'signup', to: 'users#new', as: 'signup'
get 'login', to: 'sessions#new', as: 'login'
get 'logout', to: 'sessions#destroy', as: 'logout'

resources :sessions
resources :users 
resources :forms 
resources :projects
resources :jobs
root :to => 'forms#index'

1 个答案:

答案 0 :(得分:0)

我不是百分之百确定你想要做什么,但是让我对它进行抨击。

嗯,我看到的第一件事就是在第一行的update_job中你尝试抓取一个Change对象并将其放入@change。问题是你使用的@change.id显然尚未设置。如果您通过参数获得id,则需要使用:

@change = Change.find(params[:id])

其次,您正在尝试更新Job的属性但具有Change对象。这不行。

我认为您的整体尝试是构建一个更新更改的表单,并且还会更新其关联(在这种情况下为作业)。有关如何执行此操作的快速链接,请访问:

Form Helpers&lt; ---搜索嵌套属性示例

以下是我建议的代码:

<%= form_for @change do |f| %>
  <%= f.fields_for :job do |j| %>
    Updated  : <%= j.check_box :updated %>
  <% end %>
<% end %>

这会将更新的选项放在params[:change][:jobs_attributes]中,当您将params [:change]发送到您的更新时,@change.update_attributes(params[:change])它也会更新您的工作。