Привет, я супер новичок и работаю над своим первым приложением, у меня есть таблица мест, и пользователи могут добавлять отзывы на места.Я хотел бы иметь возможность скрыть форму отзыва для пользователей после того, как они отправили отзыв, чтобы они не могли отправлять больше.
Это то, что у меня сейчас есть:
добавитьбланк отзыва на месте показа страницы
<% if reviewed? %>
<%= form_for [@venue, @review], :class => 'rating_ballot' do |f| %>
<%= f.label("value_1", content_tag(:span, '1'), {:class=>"rating", :id=>"1"}) %>
<%= radio_button_tag("review[rating]", 1, :class => 'rating_button') %>
<%= f.label("value_2", content_tag(:span, '2'), {:class=>"rating", :id=>"2"}) %>
<%= radio_button_tag("review[rating]", 2, :class => 'rating_button') %>
<%= f.label("value_3", content_tag(:span, '3'), {:class=>"rating", :id=>"3"}) %>
<%= radio_button_tag("review[rating]", 3, :class => 'rating_button') %>
<%= f.label("value_4", content_tag(:span, '4'), {:class=>"rating", :id=>"4"}) %>
<%= radio_button_tag("review[rating]", 4, :class => 'rating_button') %>
<%= f.label("value_5", content_tag(:span, '5'), {:class=>"rating", :id=>"5"}) %>
<%= radio_button_tag("review[rating]", 5, :class => 'rating_button') %> <br>
<p>title: <br>
<%= f.text_field :title %></p><br>
<%= submit_tag %>
<% end %>
<% end %>
контроллер приложения
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
helper_method :reviewed?
protected
def reviewed?
true
end
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
end
Не могу понять, что проверено?помощник должен позволять мне это делать, любая помощь очень ценится!
edit
Я добавил помощник has_reviewed в контроллер приложения, теперь он показываетэта ошибка:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
Extracted source (around line #79):
76: <%= render :partial => 'reviews/review', :collection => @venue.reviews %>
77: </div>
78:
79: <% if reviewed? %>
контроллер приложения
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
helper_method :current_user
helper_method :has_reviewed
helper_method :reviewed?
protected
def reviewed?
Review.has_reviewed(@current_user.id, venue.id)
end
def has_reviewed
!Review.where(:user_id=>user,:venue_id=>venue).blank?
end
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
end
другое редактирование
Я изменил проверенный?вспомогательный метод для:
def reviewed?
if current_user
Review.has_reviewed(@current_user.id, @venue.id)
else
nil
end
end
, но он дает неопределенный метод `has_reviewed 'для # error
схема
Место проведения имеет много отзывов
У пользователя много отзывов
Отзыв принадлежит пользователю и месту проведения
маршруты выглядят так:
App::Application.routes.draw do
resources :sessions
resources :users
resources :venues do
resources :reviews
end
end