2013-09-23 4 views
7

基本的なRails 4アプリを学習目的でセットアップしようとするとエラーが発生します。私はカスタムWebフォームを作成して表示するためのアプリケーションを作成しようとしています。私は多くのフィールドを持つフォームモデルを持っています。私は私が持っていると信じて、私のフィールドのインデックスビューでRails 4エラー:未知の属性 `html 'を書き込めません

class Form < ActiveRecord::Base  
    has_many :fields  
end 

class Field < ActiveRecord::Base 
    belongs_to :form 
end 

、:私は、私は、特定のフォームに添付新しいフィールドのレコードを作成することができますビューの作業を取得しようとしている時点でよ正しくのみに(/フォーム/ 1 /フィールドのようなURLを介して)特定のフォームのフィールドを表示するために、私のようなリンクを持って設定します

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

フィールド/ new.html.erbファイルがしましたこれは:

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

そして、fi ELDより/ _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 

IDが1のフォームが既に作成されています。/forms/1/fieldsのように見えます。私は/構成/ 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フィールドの部分表示でのform_forの呼び出しでは、かっこの代わりに角かっこが必要でした。このメソッドは、2つのオブジェクトを別々に渡さないように、2つのオブジェクトの配列を最初のパラメータとして使用します。

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

ちょっとした注意:括弧は省略可能です。あなたは '<%= form_for [@form、@field] do | f | %> 'または<%= form_for([@ form、@field])do | f | %> '両方とも正しいでしょう。角括弧はオプションではなく、配列であることを示します。 – 8bithero

関連する問題