ruby-on-rails - 目录 : undefined method new for #<Class>

标签 ruby-on-rails ruby methods resources nested

我正在处理 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/

相关文章:

ruby-on-rails - 如何在rails 2.3中使用form_tag

ruby-on-rails - 关于在 Rails 应用程序中处理 "tags"的最佳方法的建议

ruby - 更新了 ruby​​,然后通过 rvm 升级 gem 集,但是 .rvmrc 文件?

oop - 戈朗 : Method expressions instances of Object

ruby-on-rails - Bundler 找不到 gem "rack": 的兼容版本

ruby-on-rails - Rails 错误:未初始化常量 Sass::Plugin (NameError)

ruby - (Ruby)为什么这行得通?

ruby - Mongoid 删除文档匹配ID

c# - 具有异常处理的方法参数

.net - 执行 .net 方法时如何重定向 Powershell 中的错误输出?