为强参数声明值
declare value for strong parameters
当我必须为我的许可证中的一个参数和 post 形式的值声明值时,我遇到了问题。
看看我的代码:
class QuoteController < ApplicationController
autocomplete :author, :name, :full => true
autocomplete :Category, :title, :full => true
def new
@quotes = Quote.new
end
def create
@quotes = Quote.new(quotesParams)
if @quotes.save
redirect_to root_url
else
redirect_to root_url
end
end
private
def quotesParams
params.require(:quote).permit(:text,:author_id, :category_id,
{:send_type => ["web"]},
{:user_id => [current_user.id])
end
end
但是当我尝试保存在数据库中时 send_type
并且 user_id
为空
强参数更多的是关于参数的结构而不是实际的参数值。比如:
{ :send_type => ["web"] }
{ :user_id => [current_user.id] }
不分配默认值,它们在 params
中指定嵌套值的结构。
我认为您应该在两个地方处理默认值:
send_type
应默认为模型内部的 'web'
。
user_id
模型应该需要,但控制器应该设置默认值(因为那是知道 current_user
.
你的控制器中有这样的东西:
def create
@quotes = Quote.new(quotesParams) { |q| q.user_id = current_user.id }
#...
end
def quotesParams
params.require(:quote).permit(:text, :author_id, :category_id, :send_type)
end
如果控制器不提供值,您的模型可以将 send_type
默认为 'web'
。
为您的控制器尝试以下代码:
class QuoteController < ApplicationController
autocomplete :author, :name, :full => true
autocomplete :Category, :title, :full => true
def new
@quotes = Quote.new
end
def create
@quotes = Quote.new(quotesParams)
@quotes.send_type = "web"
@quotes.user_id = current_user.id
if @quotes.save
redirect_to root_url
else
redirect_to root_url
end
end
private
def quotesParams
params.require(:quote).permit(:text, :author_id, :category_id)
end
end
当我必须为我的许可证中的一个参数和 post 形式的值声明值时,我遇到了问题。 看看我的代码:
class QuoteController < ApplicationController
autocomplete :author, :name, :full => true
autocomplete :Category, :title, :full => true
def new
@quotes = Quote.new
end
def create
@quotes = Quote.new(quotesParams)
if @quotes.save
redirect_to root_url
else
redirect_to root_url
end
end
private
def quotesParams
params.require(:quote).permit(:text,:author_id, :category_id,
{:send_type => ["web"]},
{:user_id => [current_user.id])
end
end
但是当我尝试保存在数据库中时 send_type
并且 user_id
为空
强参数更多的是关于参数的结构而不是实际的参数值。比如:
{ :send_type => ["web"] }
{ :user_id => [current_user.id] }
不分配默认值,它们在 params
中指定嵌套值的结构。
我认为您应该在两个地方处理默认值:
send_type
应默认为模型内部的'web'
。user_id
模型应该需要,但控制器应该设置默认值(因为那是知道current_user
.
你的控制器中有这样的东西:
def create
@quotes = Quote.new(quotesParams) { |q| q.user_id = current_user.id }
#...
end
def quotesParams
params.require(:quote).permit(:text, :author_id, :category_id, :send_type)
end
如果控制器不提供值,您的模型可以将 send_type
默认为 'web'
。
为您的控制器尝试以下代码:
class QuoteController < ApplicationController
autocomplete :author, :name, :full => true
autocomplete :Category, :title, :full => true
def new
@quotes = Quote.new
end
def create
@quotes = Quote.new(quotesParams)
@quotes.send_type = "web"
@quotes.user_id = current_user.id
if @quotes.save
redirect_to root_url
else
redirect_to root_url
end
end
private
def quotesParams
params.require(:quote).permit(:text, :author_id, :category_id)
end
end