属于用户协会
Belongs To User association
我只想显示创建事件的用户名。但是当我尝试时它说
undefined method `user_name' for nil:NilClass
这是我的event.rb
class Event < ActiveRecord::Base
belongs_to :user
validates :name, presence: true
validates :description, presence: true, length: {minimum: 5}
end
这是我的 user.rb
class User < ActiveRecord::Base
has_secure_password
has_many :events
end
我正试图在 html.erb
文件中像这样显示用户名。
<%= event.user.user_name %>
但是我收到了这个错误。
所以这是我在 events_controller
中的创建方法
def create
@event = current_user.events.new(event_params)
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
else
format.html { render :new }
end
end
end
那么我应该怎么做才能在该页面中显示用户名。
谢谢
好的,问题来了:
您想在索引页中显示活动的用户名,但您不能确定所有活动都有一个用户与之相关联。为了避免它,你可以使用。
<%= event.user.try(:user_name) || 'No user associated' %>
祝你好运!
虽然答案会让您的应用正常运行,但它不会解决您的问题。
核心问题是您的 Event
没有关联的 User
对象。这不会是一个问题,除了从您的代码看来您 需要 一个 Event
以具有关联的 User
(current_user.events.new
等)。 ..
您需要以下内容:
#app/models/event.rb
class Event < ActiveRecord::Base
belongs_to :user
validates :user, presence: true #-> always makes sure user exists
delegate :user_name, to: :user #-> event.user_name
end
--
如果您使用上面的代码,您将能够调用 @event.user_name
(解决 law of demeter with delegate
). You'll also benefit from using validates presence
以确保 :user
关联在创建和更新时存在。
这将允许您依赖 @event.user
对象,对我来说,这比必须在您的应用程序中说 "No user associated" 要好得多:
#view
<%= @event.user_name if @event.user %>
我只想显示创建事件的用户名。但是当我尝试时它说
undefined method `user_name' for nil:NilClass
这是我的event.rb
class Event < ActiveRecord::Base
belongs_to :user
validates :name, presence: true
validates :description, presence: true, length: {minimum: 5}
end
这是我的 user.rb
class User < ActiveRecord::Base
has_secure_password
has_many :events
end
我正试图在 html.erb
文件中像这样显示用户名。
<%= event.user.user_name %>
但是我收到了这个错误。
所以这是我在 events_controller
def create
@event = current_user.events.new(event_params)
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
else
format.html { render :new }
end
end
end
那么我应该怎么做才能在该页面中显示用户名。
谢谢
好的,问题来了:
您想在索引页中显示活动的用户名,但您不能确定所有活动都有一个用户与之相关联。为了避免它,你可以使用。
<%= event.user.try(:user_name) || 'No user associated' %>
祝你好运!
虽然答案会让您的应用正常运行,但它不会解决您的问题。
核心问题是您的 Event
没有关联的 User
对象。这不会是一个问题,除了从您的代码看来您 需要 一个 Event
以具有关联的 User
(current_user.events.new
等)。 ..
您需要以下内容:
#app/models/event.rb
class Event < ActiveRecord::Base
belongs_to :user
validates :user, presence: true #-> always makes sure user exists
delegate :user_name, to: :user #-> event.user_name
end
--
如果您使用上面的代码,您将能够调用 @event.user_name
(解决 law of demeter with delegate
). You'll also benefit from using validates presence
以确保 :user
关联在创建和更新时存在。
这将允许您依赖 @event.user
对象,对我来说,这比必须在您的应用程序中说 "No user associated" 要好得多:
#view
<%= @event.user_name if @event.user %>