我有通過一個連接表相互關聯的2種型號:的form_for助手
class Book < ActiveRecord::Base
has_many :reviews
end
class Reader < ActiveRecord::Base
has_many :reviews
end
class Reviews < ActiveRecord::Base
belongs_to :reader
belongs_to :book
end
現在,我可以在路由更新的評論(我在控制檯中手動創建):
readers/:id/books
上述路線是使用軌道構件的方法創建:
resources :readers
member do
get 'books'
end
end
在評論對照的更新動作奧勒(評論#更新)的定義,像這樣:
def update
@reader = current_reader
@review = Review.find_by_reader_id(@reader.id)
@book = Book.find(params[:review][:book]
if @reader.books.include?(@book)
@review.update_attributes(review_params)
redirect_to (@reader)
else
flash[:error] = 'You can only edit reviews that belong to you'
end
end
我的form_for評論(評論#更新)看起來是這樣的: 讀者評論:
<% book.reviews.each do |review| %>
<% if current_reader == (review.reader) %>
<%= review.content %> written by <%= review.reader.name %>
<% if current_reader.reviews.include?(review) %>
<%= form_for ([book, review]) do |f| %>
<div class="field">
<%= f.hidden_field :book, :value => book.id %>
<%= f.text_area :content, placeholder: "compose new review" %>
</div>
<%= f.submit "Update", class: "btn btn-large btn-primary" %>
<% else %>
<%= form_for ([book, review]) do |f| %>
<div class="field">
<%= f.hidden_field :book, :value => book.id %>
<%= f.text_area :content, placeholder: "compose new review" %>
</div>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
<% end %>
<% end %>
<% end %>
上述工程進行更新。但是第二種形式沒有。
我的意圖是檢查評論=>如果有的話 - 顯示錶格以便讀者可以更新評論;如果沒有人會顯示一個表格,以便讀者可以創建一個評論。我在評論控制器中有一個私有方法,在進行任何操作之前檢查以確保讀者擁有一本書(我猜想是before_action方法)。
第一種形式很好(更新形式),但第二種形式沒有 - 形式根本不顯示。我嘗試了各種各樣的東西來獲得表格來顯示,但沒有運氣。您能否請我確定解決此問題的最佳方法?
非常感謝!
您嘗試過嗎? –
對不起!意外命中輸入:( 我確實嘗試了你的兩條建議: 將**。include **改爲**。exists **,並將** elsif **改爲** else **。表單顯示在頁面上的是更新表單我仍然無法顯示創建新評論的表單 我現在正在上學途中,但我會盡快更新我的問題(提供更多信息)因爲我進來了。謝謝你的幫助! – Uzzar
沒問題!等不及要讀你的更新 –