我想使用复选框来评价一本书。
我希望有5个整数,每个都有一个复选框。只能检查一个。 喜欢: 1 2 3 4 5
并在每个复选框旁边。
这些整数不直接对应数据库中的任何值。
我在视图中如何才能完成此操作?如何在控制器中使用选中的值?我想检查选择哪一个,然后更新数据库中的评级值。
我的观看代码:
<div class="book-2 book-text col-8">
<h2><%= @book.title %></h2>
<p>Rate book:</p>
<div>
控制器:
def detailedbook
@book = Book.find(params[:id])
end
我的价格模型:
class CreateRates < ActiveRecord::Migration
def up
create_table :rates do |t|
t.integer "user_id", null: false
t.integer "book_id", null: false
t.float "rating", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.timestamps null: false
end
end
def down
drop_table :rates
end
end
我的书模型:
class CreateBooks < ActiveRecord::Migration
def up
create_table :books do |t|
t.string "title", null: false
t.float "rating", default: 0
t.string "source"
t.integer "published"
t.datetime "created_at"
t.datetime "updated_at"
t.timestamps null: false
end
end
def down
drop_table :books
end
end
如果具有user_id的用户之前未对该书进行过评分,我想创建一个新的对象费率实例。如果他有,我只会更新此用户的费率模型中的评级值。然后我还会更新特定图书的评级(所有费率/所有费率的总和)。
答案 0 :(得分:0)
你可以使用这个宝石“ratyrate”来使工作更轻松
将ratyrate gem添加到Gemfile
中gem 'ratyrate'
下一步,运行以下命令:
rails g ratyrate user
rake db:migrate
包含以下Javascript:
//= require jquery.raty
//= require ratyrate
您应该添加ratyrate_rateable函数及其dimensions选项。您可以添加多个维度。
class Car < ActiveRecord::Base
ratyrate_rateable "speed", "engine", "price"
end
然后你需要在用户模型中添加一个调用ratyrate_rater。
class User < ActiveRecord::Base
ratyrate_rater
end
使用
有一个帮助方法,名称为rating_for以添加星形链接。默认情况下,rating_for将显示平均评级并接受来自经过身份验证的用户的新评级值。
<%# show.html.erb -> /cars/1 %>
Speed : <%= rating_for @car, "speed" %>
Engine : <%= rating_for @car, "engine" %>
Price : <%= rating_for @car, "price" %>
有关详情,请访问Gem Repo https://github.com/wazery/ratyrate。