【问题标题】:Rails with Wicked gem. Data will not update带有邪恶宝石的导轨。数据不会更新
【发布时间】: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


【解决方案1】:

您在评论中提到您允许在出价控制器中使用参数。将它们添加到您的构建控制器。由于您是在此控制器中构建对象,因此它需要能够访问允许的参数。

添加:

def build_params
  params.require(:bid).permit(:param_1,:param_2,:param_3,:etc)
end

致您的bids/build_controller.rb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多