我有一個作者擁有並且屬於多本書的場景,反之亦然。在instructions之後建立one-to-many
關係中的關聯可以正常工作,但是當介紹many-to-many
關係時,只要嘗試創建或更新我的書籍模型,就會收到此錯誤消息。與Rails中的公共活動使用多對多關係
undefined method `author' for #<Book:0x007fb91ae56a70>
至於設立的作者是如何選擇一本書我使用令牌輸入提供的代碼railscast here有一些改變。
class Author < ActiveRecord::Base
has_many :authorships
has_many :books, through: :authorships
def self.tokens(query)
authors = where("name like ?", "%#{query}%")
if authors.empty?
[{id: "<<<#{query}>>>", name: "Add New Author: \"#{query}\""}]
else
authors
end
end
def self.ids_from_tokens(tokens)
tokens.gsub!(/<<<(.+?)>>>/) {create!(name: $1).id}
tokens.split(',')
end
end
class Book < ActiveRecord::Base
attr_reader :author_tokens
include PublicActivity::Model
tracked owner: :author
has_many :authorships
has_many :authors, through: :authorships
def author_tokens=(ids)
self.author_ids = Author.ids_from_tokens(ids)
end
end
表單視圖
<%= form_for(@book) do |f| %>
...
<div class="field">
<%= f.text_field :author_tokens, label: 'Author', input_html: {"data-pre" => @book.authors.to_json} %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
@MohammadAbuShady任何想法如何根據之前討論的一對多來完成? – 2015-04-02 17:42:54
當你把它改成'has_many:authors'你失去了'author'方法並且得到了'authors'方法 – 2015-04-02 20:07:34
@MohammadAbuShady完美無缺。 Piotrek提供的解決方案展示瞭如何在proc中選擇一個作者,但目標是讓他們全部完成。這可能在這種特殊情況下做到嗎? – 2015-04-02 21:17:44