我有一个Rsvp
表,它构成了User
和Event
之间的联接。 Rsvp
表包含rsvp status
的信息。我需要Event
才能在users / show视图中访问此信息,或者像我在下面显示的那样拨打event.rsvp_status
之类的电话。用户可以随时自由更改rsvp状态。怎么能实现这一目标?
我的模型是什么样的:
class Rsvp < ApplicationRecord
enum status: { not_interested: 0, interested: 1, attending: 2 }
belongs_to :event
belongs_to :user
end
class Event < ApplicationRecord
has_many :rsvps
has_many :users, through: :rsvps
def title
"#{self.name} with #{self.artists.map(&:name).join(", ")} at #{self.venue.name}"
end
end
class User < ApplicaitonRecord
has_many :rsvps
has_many :events, through: :rsvps
end
我在其他模型的视图中使用这些方法,例如Venue
,Event
和Artist
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
def past_events
self.events.select { |event| event.date < DateTime.now }
end
def future_events
self.events.select { |event| event.date > DateTime.now }
end
end
在视图中,它看起来像这样。
<%= "Upcoming events: " %>
<% @user.future_events.each do |event| %>
<% unless event.rsvp_status = "not_interested" %>
<%= link_to event.title, event_path(event) %>
<%= event.rsvp_status %>
<% end %>
<% end %>
答案 0 :(得分:0)
这里出现错误:
这样做,它就有效person mycustomer_in_person = new customer(); mycustomer_in_person.DisplayInfo();
。如果你直接像undefined method 'status=' for #<Rsvp::ActiveRecord_AssociationRelation:0x007fabb403b8f0>
奇。 Rsvp.find(:id).status
表示您正在尝试设置状态值......但如果您只是想查看状态,那就不应该这样......
也是AHA! status=
表示您拥有一组RSVP,而不是一个。您可能想要做的是在Rsvp::ActiveRecord_AssociationRelation
的末尾添加.first
- 以确保您只获得一个实际的rsvp,而不是一整套(与只是集合中的一个。)
这意味着代码看起来有点像这样:
where
并在您的模板中:
class User
def rsvp_for_event(event)
rsvps.where(:event_id => event.id).first
end
end
或其他不同的东西,但给出相同的最终结果:)
考虑到这一点,rsvp-scope可能更漂亮
<% @user.future_events.each do |event| %>
<% rsvp_status = @user.rsvp_for_event(event).status %>
<% unless rsvp_status = "not_interested" %>
<%= link_to event.title, event_path(event) %>
<%= rsvp_status %>
<% end %>
<% end %>
并在您的模板中:
class Event
scope :for_event, ->(event) { where(:event_id => event.id) }
end