1

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

我要完成的工作:使用 form_for 将参数附加到现有表单。

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

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

尽管多次尝试,当前的问题是:
覆盖默认'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'
4

1 回答 1

0

我不是 100% 确定你想做什么,但让我来看看它。

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

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

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

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

表单助手<--- 搜索嵌套属性示例

这是我建议的代码:

<%= 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])它也会更新您的工作。

于 2013-04-15T19:09:12.073 回答