Ruby on Rails:无法实现星级评分系统
我正在尝试为我的应用添加一个简单的星级评分系统,并以此教程为例。 我有用户,酒店和评级模型。 依赖关系是:
(rating.rb)
belongs_to :user belongs_to :hotel
(hotel.rb)&(user.rb)
has_many :ratings
并在酒店视图中使用以下代码我收到此错误:
酒店#show中的NameError
类的未定义局部变量或方法`user’…
(在<%= form_for …行中)
酒店景观 (show.html.erb):
{:id => form_id, :class => "star_rating_form"} do |f| %> @hotel.id %> current_user.id %> form_id + "_stars" %> <li class="rating_star" id="_" data-stars="" data-form-id="">
评级控制器是:
def create end def update end def rating_params params.require(:rating).permit(:stars) end
迁移文件是:
create_table :ratings do |t| t.integer :stars, :default => 0 t.references :store t.references :user end
从评论中,错误似乎在这里:
@hotel.ratings.find_or_create_by_user_id user.id
–
用户身份
问题是您的show
视图无法访问名为user
的局部变量
这个变量应该在controller
定义(这意味着它必须是一个@instance variable
,或者应该是一个帮助器(例如current_user.id
)
因此,修复应如下:
<% user_id = user_signed_in? ? current_user.id : "-1" %> <%= form_for @hotel.ratings.find_or_create_by_user_id user_id ...
这应该让你使用你提供的代码。 由于您没有从控制器提供new
操作,我不知道代码的支持结构是否正确。
在对find_or_create_by进行一些搜索后,我将’form_for’更改为
<%= form_for @hotel.ratings.find_or_create_by(user_id: user_id)
这解决了这个问题!
感谢大家的支持!
- Rails中与数据库无关的SQL字符串连接
- 对于form_tag而不是form_for,date_select的等价物是什么?
- “respond_to do | format |”抛出UnknownFormat错误
- AssociationTypeMismatch和FactoryGirl
- 如何使用ActiveAdmin或RailsAdmin保持DRY,与主应用程序分开
- 如何使用键盘进入运行rails应用程序的ruby-debug?
- POST json到rails服务器
- 在PostsController中创建ActiveModel :: MassAssignmentSecurity :: Error
- 将已编辑的值contenteditable字段从视图传递到Rails中的控制器