Ruby on rails:如何将复选框值传递给控制器​​

时间:2016-01-15 12:05:00

标签: ruby-on-rails ruby checkbox

我想使用复选框来评价一本书。

我希望有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的用户之前未对该书进行过评分,我想创建一个新的对象费率实例。如果他有,我只会更新此用户的费率模型中的评级值。然后我还会更新特定图书的评级(所有费率/所有费率的总和)。

1 个答案:

答案 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