ruby-on-rails - Ruby Rails - 在现有数据库中添加一个 bool 复选框列以及我如何使用它

标签 ruby-on-rails

如何向现有数据库添加默认值为 false 的 bool 值 true false 列? (让我们说 user_agreement 的复选框)

我现有的表:

create_table "users", :force => true do |t|
    t.string   "name"
    t.string   "email"
end

之后我应该做什么?我应该做这样的事情吗?

html:

<%= check_box_tag "user_agreement[]" %>

Controller :

if params[:user_agreement] == '1'
    user = User.find_by_id(params[:id])
    user.update_attribute(:user_agreement, true)
    flash[:success] = "accepted agreement"
else
    user = User.find_by_id(params[:id])
    user.update_attribute(:user_agreement, false)
    flash[:success] = "didn't accepted agreement"
end

最佳答案

首先,您需要运行迁移以将列 user_agreement 添加到您的 User 模型:

$ rake generate migration AddUserAgreementToUsers user_agreement:boolean

打开刚刚生成的迁移文件并添加默认值false:

db/migrate/_add_user_agreement_to_users.rb

class AddUserAgreementToPeople < ActiveRecord::Migration
  def change
    add_column :people, :user_agreement, :boolean, default: false
  end
end

运行迁移以对数据库进行更改:

$ rake db:migrate

app/controllers/users_controller.rb

如果您运行的是 Rails 4,则需要将 user_agreement 添加到您将接受的参数列表中:

private

  def user_params
    params.require(:user).permit(:name, :email, :user_agreement)
  end

最后将 user_agreement 添加到您的表单中。

app/views/users/_form.html.erb

<%= form_for @user %>
  ...
  <%= f.check_box :user_agreement %>
  ...
<% end %>

关于ruby-on-rails - Ruby Rails - 在现有数据库中添加一个 bool 复选框列以及我如何使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21889353/

相关文章:

ruby-on-rails - rake 任务必须每 2 分钟运行一次 Controller 方法

ruby-on-rails - 具有一些智能的 Rails 迭代

javascript - Ember数据加载路线时出错: TypeError: undefined is not a function

ruby-on-rails - Rails Associations - 强大的参数构建

ruby-on-rails - 如何正确地重写模块混入的方法?

javascript - Rails 5 上的 Turbolinks 和 jQuery 兼容性

ruby-on-rails - 评论对应用程序性能的影响有多大?

ruby-on-rails - 从 Sidekiq 作业中获取错误消息

ruby-on-rails - 没有要加载的文件——RMagick.rb Rails,Ubuntu

ruby-on-rails - 查找所有记录组合