2014-08-27 124 views
2

我正在處理Rails中的嵌套資源。我的用戶有一個農場。RoR:未定義的方法#<Class>

用戶模型:

class User < ActiveRecord::Base 

has_one :farm 

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, 
    :token_authenticatable, :confirmable, :lockable, :timeoutable 


attr_accessible :email, :password, :password_confirmation, :remember_me, :username 

end 

電場控制器

class Farm < ActiveRecord::Base 

belongs_to :user 

attr_accessible :name, :contact, :adress, :user_id 
end 

我的農場遷移

class CreateFarms < ActiveRecord::Migration 
def change 
create_table :farms do |t| 
    t.references :user 
    t.string :name 
    t.string :contact 
    t.string :adress 

    t.timestamps 
end 
end 
end 

我的routes.rb

resources :users do 
    resource :farm, path: "farm" 
end 


devise_for :users, :path => 'account 

所以我想我所有的參考和協會都可以。但是當我試圖建立一個新的農場時,我得到了上述錯誤。我在FarmsController新方法:

def new 

@farm = @user.farm.new 

respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @farm } 
end 
end 

我也有一個設置爲的before_filter

def load_User 
    @user = User.find(current_user) 

end 

同樣的事情發生了我的節目的功能在這裏我使用

@farm = @user.farm.find(params[:id]) 

它說load_User功能沒有方法「找到」。 我不能猜測或者發現這是爲什麼,如果有人可以幫助和/或闡述..

+0

我剛纔補充說它對「查找」方法也一樣。 – 2014-08-27 13:42:50

+0

你應該考慮在用戶模型中刪除這些'attr_accessible'(可能也是農場),因爲它有點誤導。 – 2014-08-27 13:49:52

+0

有任何答案對您有幫助嗎? – 2014-08-28 07:09:50

回答

5

因爲(可能)你試圖調用findFarm實例,它沒有定義find方法,你有這樣的錯誤。由於@user.farm已經返回Farm實例(或nil),你應該有簡單:

@farm = @user.farm 

你的第一個錯誤是相似的。它發生是因爲沒有爲Farm實例定義new方法。相反,你應該有:

@farm = @user.build_farm 
5
  1. 沒有@user.farm.new方法,因爲它的一個-to-one關聯。嘗試@user.build_farm

  2. 它非常簡單。如果只有一個農場,那麼就不需要搜索它。 @user.farm應該足夠了。

相關問題