2013-09-23 27 views
7

因爲學習的目的而試圖設置一個基本的Rails 4應用程序時出現錯誤,請耐心等待!我正在嘗試創建一個應用程序來創建和顯示自定義Web表單。我有一個表單模型,它有很多字段。我在這裏,我試圖讓該視圖的工作,讓我來創建連接到特定的形成新的字段記錄了這一點:Rails 4 error:不能寫未知屬性`html'

class Form < ActiveRecord::Base  
    has_many :fields  
end 

class Field < ActiveRecord::Base 
    belongs_to :form 
end 

在我的領域指數來看,我相信我有設置正確,只顯示一個特定的形式的字段(通過像URL /形成/ 1 /場),我有一個鏈路作爲這樣:

<%= link_to 'New Field', new_form_field_path(@form) %> 

的字段/ new.html.erb文件具有這個:

<h1>New field</h1> 
<%= render :partial => 'form', :form => @form, :field => @field %> 

而且fi視場/ _form.html.erb開始這樣的:

<%= form_for(@form, @field) do |f| %> 

的fields_controller.rb具有限定的本方法:

def new 
    @form = Form.find(params[:form_id]) #unsure if this is necessary/correct, but its presence doesn't effect the error i'm getting 
    @field = Field.new 
end 

A表格ID爲1已經被創建。它看起來像/形式/ 1 /領域出來確定。但是,當我點擊「新領域」的鏈接,這需要我/表格/ 1 /場/新,我得到這個錯誤:

Showing /home/moskie/Projects/FormBuilder/app/views/fields/_form.html.erb where line #1 raised: 

can't write unknown attribute `html' 
Extracted source (around line #1): 

    <%= form_for(@form, @field) do |f| %> 
    <% if @field.errors.any? %> 
     <div id="error_explanation"> 
     <h2><%= pluralize(@field.errors.count, "error") %> prohibited this field from being saved:</h2> 

Trace of template inclusion: app/views/fields/new.html.erb 

Rails.root: /home/moskie/Projects/FormBuilder 

Application Trace | Framework Trace | Full Trace 
app/views/fields/_form.html.erb:1:in `_app_views_fields__form_html_erb___1866877160086017450_70350628427620' 
app/views/fields/new.html.erb:3:in `_app_views_fields_new_html_erb___1515443138224133845_70350627074400' 
Request 

Parameters: 

{"form_id"=>"1"} 

我敢用這個錯誤是什麼告訴我困惑,所以我無法弄清楚我在這裏做錯了什麼。誰能幫我嗎?謝謝。

回答

24

明白了。在_form.html.erb Field部分視圖中調用form_for需要方括號,而不是括號。該方法需要在這種情況下將兩個對象的數組作爲其第一個參數,而不是將兩個對象分別傳入:

<%= form_for [@form, @field] do |f| %> 
+3

只是有點小提示:括號是可選的。你可以寫'<%= form_for [@form,@field] do | f | %>'或'<%= form_for([@form,@field])do | f | %>',兩者都是正確的。方括號不是可選的,它們表明它是一個數組。 – 8bithero