RoR:#<Class>的新定义方法

Adm*_*ric 2 ruby methods resources nested ruby-on-rails

我正在处理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
Run Code Online (Sandbox Code Playgroud)

农场控制器

 class Farm < ActiveRecord::Base

 belongs_to :user

 attr_accessible :name, :contact, :adress, :user_id
 end
Run Code Online (Sandbox Code Playgroud)

我的农场迁移

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
Run Code Online (Sandbox Code Playgroud)

我的routes.rb

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


 devise_for :users, :path => 'account
Run Code Online (Sandbox Code Playgroud)

所以我认为我的所有参考和协会都没问题.但是当我尝试制作一个新农场时,我得到了上述错误.我在FarmsController中的新方法:

def new

@farm = @user.farm.new

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @farm }
end
end
Run Code Online (Sandbox Code Playgroud)

我还有load_User函数设置为before_filter

def load_User
  @user = User.find(current_user)

end
Run Code Online (Sandbox Code Playgroud)

同样的事情发生在我使用的show函数中

@farm = @user.farm.find(params[:id])
Run Code Online (Sandbox Code Playgroud)

它说没有方法"找到".如果有人可以提供帮助和/或详细说明,我无法猜测或找到原因.

Mar*_*pka 5

因为(可能)您尝试调用你有这个错误findFarm情况下,它没有find定义的方法.既然@user.farm已经返回Farm实例(或nil),你应该简单地:

@farm = @user.farm
Run Code Online (Sandbox Code Playgroud)

你的第一个错误是类似的.之所以发生这种情况,是因为没有为new方法定义方法Farm.相反,你应该:

@farm = @user.build_farm
Run Code Online (Sandbox Code Playgroud)


Mar*_*zyk 5

  1. 没有@user.farm.new方法,因为它是一对一的关联.尝试@user.build_farm

  2. 它真的很简单.如果只有一个农场,则无需搜索.@user.farm应该够了.