Ruby Rails - 在现有数据库中添加一个布尔复选框列以及如何使用它

Joh*_*erp 2 ruby-on-rails

如何使用默认值 false 向现有数据库添加布尔值 true false 列?(可以说 user_agreement 的复选框)

我现有的表:

create_table "users", :force => true do |t|
    t.string   "name"
    t.string   "email"
end
Run Code Online (Sandbox Code Playgroud)

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

html:

<%= check_box_tag "user_agreement[]" %>
Run Code Online (Sandbox Code Playgroud)

控制器:

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
Run Code Online (Sandbox Code Playgroud)

fra*_*ort 5

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

$ rake generate migration AddUserAgreementToUsers user_agreement:boolean
Run Code Online (Sandbox Code Playgroud)

打开您刚刚生成的迁移文件并添加默认值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
Run Code Online (Sandbox Code Playgroud)

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

$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)

应用程序/控制器/users_controller.rb

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

private

  def user_params
    params.require(:user).permit(:name, :email, :user_agreement)
  end
Run Code Online (Sandbox Code Playgroud)

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

应用程序/视图/用户/_form.html.erb

<%= form_for @user %>
  ...
  <%= f.check_box :user_agreement %>
  ...
<% end %>
Run Code Online (Sandbox Code Playgroud)