我希望Rails 4能够在3个模型之间进行简单的关联,但我无法成功。
第一个模型:读者,第二个模型:评论第三个模型:书籍
3个模型之间的关系是:
class Book<的ActiveRecord :: Base的 has_many:评论
课程评论<的ActiveRecord :: Base的 belongs_to:书 belongs_to:读者
class Reader<的ActiveRecord :: Base的 has_many:评论 has_many:书籍,通过::评论
我没有问题关于Book has_many:comments但是我对关系阅读器has_many:comments有一些问题。
来自CommentsTable的字段:用户名,消息和reader_id(用于has_many关联)。 来自ReaderTable的字段:姓名,电子邮件。
我在视图中有一个_form.html.erb文件:
<%= form_for [@book, @comment] do |f| %>
<%= f.hidden_field :book_id %>
<%= f.text_field :reader_id, :placeholder => "reader id" %>
<br />
<%= f.text_area :message %>
<br />
<%= f.submit %>
<% end %>
另一个文件_comment.html.erb:
<% if comment.reader_id != nil %>
<li><strong><%= link_to comment.reader.name, comment.reader %></strong></li>
<p><%= comment.message %></p>
<% end %>
就像你看到我有一个带有reader_id和消息的表单。当用户输入这2个信息时,它将显示reader.name(感谢reader_id)和comment.message。 但我不希望用户输入整数&#34; reader_id&#34; (它没有任何意义)但直接字符串&#34; reader.name&#34;。 我怎么能这样做,知道我会在reader.name上发表link_to到comment.reader吗?
请帮帮我。 谢谢。
答案 0 :(得分:0)
我猜测读者就是用户。如果是,那么您可能希望拥有一个完整的身份验证系统(可能考虑设计),并将注释分配给控制器中的当前用户。您还希望在控制器中分配书籍。
编辑:
Devise将在您的控制器中提供current_user方法。因此,评论控制器中的创建方法应如下所示:
def create
comment = current_user.comments.new(comment_params)
end
您不需要将reader.name分配给评论。这是该协会的用途。你可以做comment.reader.name,或者更好的是,使用delegate(查看)并执行comment.reader_name。