相当新的铁轨,这意味着我相信我已经掌握了大部分基础知识,但绝对仍然是艺术的学生。
我想要完成的任务:使用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'
答案 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])
它也会更新您的工作。