Activerecord Rails:为nil类创建的未定义方法
我正在创建一个示例项目,但当我试图创建一个新帖子时,出现了一个错误“undefined method create for nil class” 我的代码如下。Activerecord Rails:为nil类创建的未定义方法,activerecord,ruby-on-rails-4,Activerecord,Ruby On Rails 4,我正在创建一个示例项目,但当我试图创建一个新帖子时,出现了一个错误“undefined method create for nil class” 我的代码如下。 user.rb class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_one :p
user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_one :post, dependent: :destroy
end
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :posts, dependent: :destroy
end
请帮助我并告诉我这两个代码之间的区别是什么?区别在于添加的帮助器方法允许您构建或创建新的关联对象。与
有多个关联相比,有一个关联的方法稍有不同
例如,创建新关联对象的方法是user.create\u post
例如,创建新关联对象的方法是user.posts.create
谢谢。我使用的是has\u many关联语法。
class PostsController < ApplicationController
def create
@user = current_user
if @user.post.blank?
@post = @user.post.create(params[:post].permit(:title, :text))
end
redirect_to user_root_path
end
end
<%= form_for([current_user, current_user.build_post]) do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :posts, dependent: :destroy
end
class Post < ActiveRecord::Base
belongs_to :user
end
class PostsController < ApplicationController
def create
@user = current_user
if @user.posts.blank?
@post = @user.posts.create(params[:post].permit(:title, :text))
end
redirect_to user_root_path
end
end
<%= form_for([current_user, current_user.posts.build]) do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
UserBlog::Application.routes.draw do
devise_for :users, controllers: { registrations: "registrations" }
resources :users do
resources :posts
end
# You can have the root of your site routed with "root"
root 'home#index'
end