【发布时间】:2014-04-18 04:45:53
【问题描述】:
我正在使用 Wicked gem 分多个步骤创建对象。一切似乎都运行良好,直到我意识到数据没有保存。我注意到,只要 url: wizard_path 出现在表单构建器中,它就不会保存。当那不存在时,数据保存得很好,无论我在哪一步。这是我的对象构建器控制器的样子:
class Bids::BuildController < ApplicationController
include Wicked::Wizard
steps :intro, :problems, :solutions, :pricing
def show
@bid = Bid.find(params[:bid_id])
render_wizard
end
def create
@bid = Bid.new(bid_params)
redirect_to wizard_path(steps.first, :bid_id => @bid.id)
end
def update
@bid = Bid.find(params[:bid_id])
params[:bid][:status] = 'active' if step == steps.last
@bid.attributes = params[:bid].permit(:bid_attribute)
render_wizard @bid
end
# GET /bids/new
def new
@bid = Bid.new
redirect_to wizard_path(steps.first, :bid_id => @bid.id)
end
end
【问题讨论】:
-
你能检查你的日志是否有错误吗?我的猜测是您必须将参数列入白名单。检查您的日志中的禁止属性错误
-
@deep 我在日志中确实收到了错误。不允许的参数。什么是白名单参数?
-
@deep 在我的构建控制器中,我的出价模型确实有这个 .permit(:fields) 。但是我在上面的控制器(bids/build_controller.rb)中需要这个吗?
-
添加一个私有方法,如 def bid_params 并在方法内部添加 params.require(:bid).permit(:status, :attribute_1, :atribute_2)。请注意,您需要允许通过表单获得的所有属性,然后只需使用 @bid.attributes = bid_params
-
在此处阅读更多关于强参数的信息edgeapi.rubyonrails.org/classes/ActionController/…
标签: ruby-on-rails ruby data-persistence wicked-gem