当我必须为我的许可证中的一个参数声明值以及从表单后的值中声明值时,我遇到了问题。 看看我的代码:
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
为空
答案 0 :(得分:1)
强参数更多地是关于参数的结构而不是实际参数值。所以像:
{ :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'
。
答案 1 :(得分:0)
请为您的控制器尝试以下代码:
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