結合テーブルを介して互いに関連付けられている 2 つのモデルがあります。
class Book < ActiveRecord::Base
has_many :reviews
has_many :readers, through: :libraries
end
class Reader < ActiveRecord::Base
has_many :reviews
has_many :books, through: :reviews
end
class Reviews < ActiveRecord::Base
belongs_to :reader
belongs_to :book
end
レビューには次の列があります。
- コンテンツ
- リーダーID
- book_id
books コントローラ (book#show) の show アクションは次のように定義されます。
def show
@book = book.find[:id]
end
主なアイデアは次のとおりです。読者は本を読んでレビューする必要があります(本がない場合、読者は本のレビューを書くことができません)
ショー (show.html.erb) の本のビューでは、次のように、本に属するレビュー オブジェクトとリーダー オブジェクトの両方にアクセスできます。
書評
<% @book.reviews.each do |review| %>
<%= review.content %> written by <%= review.reader.name %>
書籍のプロフィールは誰でも見ることができますが、書籍をレビューできるのは、サインインして書籍を購入した人だけです。@review オブジェクトの form_for ヘルパーが必要で、共有フォルダー (ビューの下) にあります。私の form_for ヘルパー @review オブジェクトは次のようになります。
<%= form_for(review) do |f| %>
<div class="field">
<%= f.text_area :content, placeholder: "compose new review" %>
</div>
<%= f.submit "Update", class: "btn btn-large btn-primary" %>
<% end %>
私の問題は次のとおりです。 読者が本のプロフィール ページ (book#show) で本のレビューを編集できるようにしたいと考えています。サインインして本を購入した読者だけがレビューを作成/更新できることを確認する if/else ステートメントがあります。それは次のようなものです: 書評
<% @book.reviews.each do |review| %>
<%= review.content %> | written by <%= review.reader.name %>
<% if signed_in? && current_reader?(review.reader) %>
<div class="row">
<aside class="span4">
<section>
<%= render 'shared/review_form', review: review %>
</section>
</aside>
</div>
<% else %>
#Do something else
<% end %>
<%end%>
次のエラーが表示されます。
undefined method `model_name' for #<Class:0x007fe568871c70>
上記のエラーのクラスは book で、モデルは @review だからだと思いますか? @review の form_for ヘルパーにアクセスするレビュー オブジェクトを渡す方法を教えてください。@book
どうもありがとうございました!