2015-12-27 108 views
0

我想用Rails 4做3個模型之間的簡單關聯,但我不能成功做到這一點。Rails4 - 協會has_many通過 - Reader_id

第一種模式:讀卡器,第二種模式:評論第三種模式:書籍

的關係beetween的3款車型分別是:

類圖書<的ActiveRecord :: Base的 的has_many:評論

類評論< ActiveRecord :: Base belongs_to:book belongs_to:reader

class Reader <的ActiveRecord :: Base的 的has_many:評論 的has_many:書籍,通過:評論

我有關係書的has_many沒有問題:評論,但我有一些問題的關係讀者的has_many:評論。

來自評論表的字段:用戶名,消息和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。 但我不希望用戶輸入整數「reader_id」(它沒有意義),但直接輸入字符串「reader.name」。 我該怎麼做,知道後我會做一個link_to reader.name到comment.reader?

請幫幫我。 謝謝。

回答

0

我猜讀者是用戶。如果是這樣,那麼你可能會想要一個完整的身份驗證系統(也許考慮設計),並將該評論分配給控制器中的當前用戶。您還需要在控制器中分配書籍。

編輯:

設計將提供一份CURRENT_USER方法在你的控制器。因此,您的評論控制器中的創建方法應如下所示:

def create 
    comment = current_user.comments.new(comment_params) 
end 

您不需要將reader.name分配給註釋。這是該協會的目的。你可以做comment.reader.name,或者更好的做法是,使用委託(看起來)和做comment.reader_name。

+0

是的,我使用Devise,讀者正是用戶。但我不知道如何給當前用戶分配評論。我的用戶表使用設計只有字段:電子郵件,身份證,密碼。它沒有字段「名稱」(用於評論)。此外,我需要將reader.name分配給評論,因爲我需要通過評論(閱讀器has_many:書籍,通過::評論)創建reader_id和書籍之間的關係 – Joker

+0

檢查我的編輯 – baron816