У меня есть сценарий, в котором автор имеет и принадлежит ко многим книгам, наоборот. Следуя за 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 Любая идея о том, как это будет сделано, исходя из обсуждаемого ранее вопроса «один-ко-многим»? –
, когда u изменил его на 'has_many: authors', вы потеряли метод' author' и получили метод 'author' вместо –
@MohammadAbuShady Делает прекрасный смысл. Решение, предоставленное Piotrek, показывает, как выбрать одного автора в proc, но целью было бы получить их все. Можно ли это сделать в этом конкретном сценарии? –