我正在处理 Rails 中的嵌套资源。我的用户有一个农场。
用户模型:
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
我的路线.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 的 load_User 函数
def load_User
@user = User.find(current_user)
end
同样的事情发生在我使用的 show 函数上
@farm = @user.farm.find(params[:id])
它说没有方法“查找”。 如果有人可以提供帮助和/或详细说明,我无法猜测或找到原因。
最佳答案
出现此错误是因为(可能)您尝试在 Farm
实例上调用 find
,该实例未定义 find
方法。因为 @user.farm
已经返回 Farm
实例(或 nil
),你应该简单地:
@farm = @user.farm
您的第一个错误与此类似。这是因为没有为 Farm
实例定义 new
方法。相反,您应该:
@farm = @user.build_farm
关于ruby-on-rails - 目录 : undefined method new for #<Class>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25528749/