2013-02-01 28 views
0

我有一個嵌套的用戶註冊表單。我想插入3個模型的數據。 UserStorePreference。關係是Userhas_many :storeshas_one :preference如何在Ruby on Rails中使用object.build或build_object使用隱藏字段?

問題我有隱藏的字段不顯示在我的視圖。我沒有正確使用@user.restaurants.build@user.build_preference嗎?

這裏是我的模型:

class User < ActiveRecord::Base 
    attr_accessible :email, :full_name, :password, :password_confirmation 
    has_secure_password 

    validates_uniqueness_of :email 
    validates_presence_of :full_name 

    has_many :stores, :dependent => :destroy 
    has_one :preference, :dependent => :destroy 

    accepts_nested_attributes_for :stores 
    accepts_nested_attributes_for :preference 
end 

class Store < ActiveRecord::Base 
    attr_accessible :name, :tagline, :address, :city, :postal, :state, :phone, :hours, :user_id 

    belongs_to :user 
end 

class Preference < ActiveRecord::Base 
    attr_accessible :background_fill, :background_position, :body_color, :body_font, :body_size, :heading_color, :heading_font, :heading_size, :layout, :link_color, :logo_color, :logo_size, :logo_font 

    belongs_to :user 
end 

我UsersController:

class UsersController < ApplicationController 

def new 
    @user = User.new 
    @user.stores.build 
    @user.build_preference 
end 

筆者認爲:

<%= form_for @user do |f| %> 
    <% if @user.errors.any? %> 
    <div class="error_messages"> 
    <h2>There was an error!</h2> 
    <ul> 
     <% @user.errors.full_message.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
    </ul> 
    </div> 
    <% end %> 
    <%= f.label :full_name %> 
    <%= f.text_field :full_name, :class => "target", :placeholder => "Your full name", :maxlength => "55", :autofocus => "autofocus" %> 
    <%= f.label :email %> 
    <%= f.email_field :email, :class => "target", :placeholder => "[email protected]", :maxlength => "55" %> 
    <%= f.label :password %> 
    <%= f.password_field :password, :class => "target", :placeholder => "Enter a password", :maxlength => "55" %> 
    <%= f.label :password_confirmation, "Confirmation" %> 
    <%= f.password_field :password_confirmation, :class => "target", :placeholder => "Enter your password again", :maxlength => "55" %> 
    <% f.fields_for :stores do |builder| %> 
    <%= builder.hidden_field :name, value: params[:name] %> 
    <%= builder.hidden_field :tagline, value: params[:tagline] %> 
    <%= builder.hidden_field :address, value: params[:address] %> 
    <%= builder.hidden_field :city, value: params[:city] %> 
    <%= builder.hidden_field :state, value: params[:state] %> 
    <%= builder.hidden_field :postal, value: params[:postal] %> 
    <%= builder.hidden_field :phone, value: params[:phone] %> 
    <%= builder.hidden_field :hours, value: params[:hours] %> 
    <% end %> 
    <% f.fields_for :preference do |builder| %> 
    <%= builder.hidden_field :layout, value: params[:layout] %> 
    <%= builder.hidden_field :background_fill, value: params[:background_fill] %> 
    <%= builder.hidden_field :background_position, value: params[:background_position] %> 
    <% end %> 
    <%= f.submit "Create an Account for Free", :class => "button cta" %> 
<% end %> 

而且,如果它的任何幫助,我試圖按照本教程on Railscast:http://railscasts.com/episodes/196-nested-model-form-part-1

謝謝!

回答

0
<% f.fields_for :preference do |builder| %> 

這必須

<%= f.fields_for :preference do |builder| %> 

這同樣適用於你的其他呼叫f.fields_for

來源:The API

+0

上帝,我感到很傻。謝謝參觀! –

0

我是相當新的軌道,但我認爲構建應在創建行動。

@ user.stores.build(PARAMS [:用戶] [:店鋪])

我猜測,因爲我沒有試圖建立這樣一個觀點,我通常創建一個用戶的步驟創建一個用戶,然後建立協會,通過建立

+0

感謝您抽空看看。儘管我在創建動作中沒有問題,但我只是試圖渲染新內容。在我看來,當我使用時,隱藏字段並未顯示: '<%f.fields_for:stores do | builder | %>' –

+0

沒問題對不起,我錯過了=。很好趕上Deefour – engineersmnky