我是rails的新手,我的应用中有一些has_many through:
关系。
我有User, Message
和Message_Recipients
个模型(用户有很多邮件,邮件有一个发件人,邮件有很多收件人 - message_recipients是连接表)。
我正在尝试在我的消息视图中显示消息发件人的姓名,该视图保存在用户模型中。但是,无论我尝试做什么,我都会遇到错误 - 我不确定我是否坚持“Rails Way”。
用户字段为:id, forename, surname, email
消息字段为:id, sender_id, subject, body
sender_id是用户FK
Message_Recipient字段为:id, user_id, message_id
user / message_id为FK
以下是我的模特(我也在使用Devise):
class Message < ActiveRecord::Base
belongs_to :user, :class_name => User, :foreign_key => "sender_id"#sender
has_many :message_recipients
has_many :users, through: :message_recipients
end
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :message_recipients
has_many :messages, through: :message_recipients
end
class MessageRecipient < ActiveRecord::Base
belongs_to :message, :class_name => Message, :foreign_key => "message_id"
belongs_to :user, :class_name => User, :foreign_key => "user_id"
end
这是我的消息/ index.html.erb:
<% @messages.each do |message| %>
<div class="message">
<h2><%= message.subject %></h2>
<p>Sent by <%= message.user.forename %></p>
</div>
<% end %>
我认为由于获得NoMethodError而无法根据发送邮件的人的sender_id获取用户名字的值,因此我遇到了麻烦。
非常感谢任何帮助/最佳实践建议!
答案 0 :(得分:0)
关联可能很棘手而不会过度思考。您只需要两个模型,用户和消息。 消息表将包含标题,文本,recipient_id和sender_id。 (听起来像发件人会从数据库中的收件人下拉列表中选择。一旦选择该人的user_id将被标记,并且current_user的user_id将被设置为发件人的id另一个字段:示例 Message.create((id将是自动的)sender(current_user user_id)收件人(user_id),文本:“祝你有愉快的一天”) 在用户模型中:拥有并属于消息;在消息模型中:属于用户。 在你的控制台中尝试一下。