2013-09-23 17 views
7

Laufen in einen Fehler, der versucht, eine grundlegende Rails 4 APP für Lernzwecke zu gründen, so erträgt mit mir! Ich versuche eine App zum Erstellen und Anzeigen von benutzerdefinierten Webformularen zu erstellen. Ich habe ein Formularmodell, das viele Felder hat. Ich bin an dem Punkt, wo ich versuche, den Blick zum Laufen zu bringen, die mir ein neues Feld Datensatz an eine bestimmte Form gebunden erstellen können:Rails 4 Fehler: kann unbekanntes Attribut `html 'nicht schreiben

class Form < ActiveRecord::Base  
    has_many :fields  
end 

class Field < ActiveRecord::Base 
    belongs_to :form 
end 

Auf meinem Feldindex Ansicht, die ich glaube, ich habe eingerichtet, um richtig nur die Felder einer bestimmten Form zeigen (über eine uRL wie/forms/1/Felder), ich habe einen Link als solche:

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

die Felder/new.html.erb Datei hat dies:

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

Und die fi Felder/_form.html.erb beginnt wie folgt:

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

Die fields_controller.rb Diese Methode hat definiert:

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 

eine Form mit der ID 1 bereits erstellt wurde. Es sieht aus wie/forms/1/fields ok. Aber wenn ich die „Neues Feld“ Link klicken, die mir nimmt/forms/1/Felder/neu, bekomme ich diesen Fehler:

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"} 

Ich bin ziemlich verwirrt durch das, was dieser Fehler sagt mir, so Ich habe Probleme herauszufinden, was ich hier falsch gemacht habe. Kann mir jemand helfen? Vielen Dank.

Antwort

24

Verstanden. Der Aufruf von form_for in der Teilansicht _form.html.erb Field benötigte eckige Klammern anstelle der Klammern. Die Methode möchte in diesem Fall ein Array der beiden Objekte als ersten Parameter haben, um die beiden Objekte nicht separat übergeben zu haben:

+3

Nur eine kleine Randnotiz: Die Klammern sind optional. Sie könnten '<% = form_for [@form, @field] do | f | schreiben %> 'oder' <% = form_for ([@ form, @field]) do | f | %> 'und beide wären korrekt. Die eckigen Klammern sind nicht optional, sie geben an, dass es sich um ein Array handelt. – 8bithero

Verwandte Themen