所以我在我的书籍视图中有这个表格,它显示了一个选择框,可以选择布尔值是真还是假。
但是当我提交它时,如果我选择它,它不会将布尔值更改为true。
这是我的书籍计划基本上:
create_table "books", force: true do |t|
t.string "name"
t.integer "user_id"
t.boolean "oppetool", default: false
t.datetime "created_at"
t.datetime "updated_at"
t.integer "count", default: 0
end
为什么不改变我的条目的布尔值?
我的观点:
<% provide(:title, "Submit a book") %>
<b align="center">Enter the name of a book you want to add into the database and then press 'Submit!'</b>
<%= form_for(@book) do |f| %>
<div class="forms">
<%= f.text_field :name, placeholder: "Type what you want to say...", autofocus: true %>
<%= f.check_box(:oppetool, {}, "True", "False") %>
<%= f.submit 'Submit!' %>
</div>
<% end %>
图书管理员:
class BooksController < ApplicationController
before_action :signed_in_user, only: [:index,:edit,:update, :destroy]
before_action :admin_user, only: :destroy
before_action :set_book, only: [:show, :edit, :update, :destroy]
def index
@books = Book.all
end
def show
@book = Book.find(params[:id])
end
def new
@book = current_user.books.build
end
def create
@book = current_user.books.build(book_params)
if @book.save
flash[:success] = "Book listed!"
redirect_to books_path
else
flash[:success] = "Did you leave a field empty? All fields must be filled before we can accept the review!"
render new_book_path
end
end
def edit
end
def update
end
def destroy
end
# Private section
private
def book_params
params.require(:book).permit(:name, :user_id)
end
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
def admin_user
redirect_to(root_url) unless current_user.admin?
end
# Redirecting not logged in user etc.
def signed_in_user
unless signed_in?
store_location
redirect_to '/sessions/new', notice: "Please sign in!"
end
end
end
答案 0 :(得分:1)
阻止值改变的是控制器逻辑中的这一行:
params.require(:book).permit(:name, :user_id)
您实际上阻止:oppetool
在此处更改。将此行更改为
params.require(:book).permit(:name, :oppetool)
。
我还会在此处移除:user_id
以避免人mass-assigning这个值,这可能是您想要的。
顺便说一下,为什么要自己设置两个复选框值,而不是将它们留空,如下所示:
<%= f.check_box(:oppetool) %>
?
如果你使用它,Rails应该自动将默认值“0”和“1”转换为相应的布尔值。我不确定这是否适用于“真实”和“假”,这就是我要问的原因。
答案 1 :(得分:1)
您未在允许的参数列表中包含:oppetools(book_params)。
答案 2 :(得分:1)
首先,更新book_params
以允许oppetool
params.require(:book).permit :name, :user_id, :oppetool
然后只需使用
<%= f.check_box :oppetool %>
默认设置使用“0”表示false,“1”表示true。