2014-07-14 44 views
0

我在視圖中有一個窗體的錯誤,無法得到它爲什麼會發生。我不斷收到ActionView::Template::Error (undefined method 'stage' for #<User:0x007f80045ca0e0>)ActionView :: Template :: Error(未定義的方法`階段'爲#<用戶:0x007f80045ca0e0>)

我有兩個模型,User和Stage。用戶has_many階段,以及階段belongs_to給用戶。這是如下

的階段模型:對

class UsersController < ApplicationController 

    def show 
     @newMatch = current_user.matches.new 
     @newStage = current_user.drivepipes.new 
    end 

end 

和形式:

class Stage < ActiveRecord::Base 
    belongs_to :user 
end 

用戶模型:

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
      :recoverable, :rememberable, :trackable, :validatable 

    has_one :user_setting  
    has_many :matches,  dependent: :destroy 
    has_many :stages, dependent: :destroy 

end 

,並在用戶控制器我有如下show.html.erb

<%= form_for [current_user], url: user_stages_path(current_user, @newStage) do |s| %> 

    <%= s.text_field :stage,    placeholder: "Stage" %> 

    <%= s.submit "Save" %> 

<% end %> 
+0

這應該是'的has_many:stages',而不是'stage' – PericlesTheo

+0

你'的has_many:stage',而不是'的has_many:stages'代碼。 – Pavan

+0

錯字,但仍然得到相同的錯誤 – tvieira

回答

0

如果每個用戶都有很多階段,並且正在爲您的用戶製作一個表單,則<%= s.text_field :stage, placeholder: "Stage" %>會給您一個錯誤,因爲用戶has_many :stages這是一個可枚舉的。所以,你會希望像

<%= form_for [current_user], url: user_stages_path(current_user, @newStage) do |s| %> 
    <% current_user.stages.each do |stage| %> 
    <%= s.text_field stage, placeholder: "Stage" %> 
    <% end %> 
    <%= s.submit "Save" %> 
<% end %> 

假設你想要一個文本字段,用戶有每一個階段,那就是。也許這不是這裏的目標?

+0

爲什麼使用每種方法? – tvieira

+1

由於你的關係是一對多的,所以方法是:階段,而不是階段。所以你需要接受Stage模型的參數。 您也可以在表單中使用fields_for方法。 http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for –

+0

@TiagoOrnelasVieira,因爲它是一個可枚舉的,你說它有一個一對多的關係,暗示每個用戶有多個階段,因此「每個」都需要向他們展示。 – MCBama

0

用戶和舞臺之間有一對多的關係。所以,外鍵將駐留在Stage表即user_id中。您應該明確指出,如果User對象具有多個階段,則不能在該對象中包含屬性「stage」或stage_id。然而導軌具有助手:

@user.stages 

將返回已保存的與該用戶的ID階段陣列,使用查詢:

select * from stages where stages.user_id = @user.id 

雖然:

@user.stage 

會引發錯誤。

如果你想輸入與當前用戶相關聯的新創建的階段目標,您可以查看代碼應該是這樣的:

<%= form_for current_user, url: user_stages_path(current_user, @newStage) do |user_form| %> 

    <%= user_form.fields_for @newStage do |stage| %> 
     <%= stage.text_field :stage, placeholder: "Stage" %> 
    <% end %> 

    <%= user_form.submit "Save" %> 

<% end %> 

後來,在控制器;你可以用類似的方式獲得的階段目標:

stage = Stage.new params[:user][:stage] 
相關問題