属于用户协会

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 以具有关联的 Usercurrent_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 %>