0

結合テーブルを介して互いに関連付けられている 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

どうもありがとうございました!

4

1 に答える 1