Ruby on rails rails 3,如何通过不保存的Controllercreate操作设置并传递查询字符串

Ruby on rails rails 3,如何通过不保存的Controllercreate操作设置并传递查询字符串,ruby-on-rails,ruby-on-rails-3,query-string,Ruby On Rails,Ruby On Rails 3,Query String,我有3个视图,用户在一个订单中看到,首先他们选择一个位置,然后选择一个类别,然后他们被发送到一个表单。第一个视图将位置信息发送到类别选择视图。在category select视图中,我使用查询字符串将类别id发送到表单。在Controllernew操作中,我将查询字符串放入一个实例变量:@award=award.findparams[:award] 问题是,如果用户没有填写适当的字段,则表单不会保存,查询字符串也不再存在。在我的例子中,这意味着推荐不再具有类别,这将继续导致表单失败 如何通过失败

我有3个视图,用户在一个订单中看到,首先他们选择一个位置,然后选择一个类别,然后他们被发送到一个表单。第一个视图将位置信息发送到类别选择视图。在category select视图中,我使用查询字符串将类别id发送到表单。在Controllernew操作中,我将查询字符串放入一个实例变量:@award=award.findparams[:award]

问题是,如果用户没有填写适当的字段,则表单不会保存,查询字符串也不再存在。在我的例子中,这意味着推荐不再具有类别,这将继续导致表单失败

如何通过失败的创建操作持久化查询字符串

def create
    @recommendation = Recommendation.new(params[:recommendation])
    @recommendation.user_id = current_user.id


    respond_to do |format|
      if @recommendation.save
        format.html { redirect_to location_path, notice: 'Recommendation was successfully created.' }
        format.json { render json: @recommendation, status: :created, location: @recommendation }
      else
        format.html { render action: "new" }
        format.json { render json: @recommendation.errors, status: :unprocessable_entity }
      end
    end
  end
编辑_

我想我可以将新动作分享给:

def new
    @recommendation = Recommendation.new
    @award = Award.find(params[:award])
    @recommendation.approvals.build
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @recommendation }
    end
  end

好的,因为querystring已经从新操作传递到创建操作,如果创建操作失败,它将命中“format.html{render action:new}”行

你可以这样做:

format.html {redirect_to thing_path(@thing, :foo => params[:foo])}

您可以始终在formI上的隐藏字段中“持久化”数据。该视图包含一个隐藏字段,但隐藏字段由实例变量填充,该变量在保存失败后返回nill。@TJ Sherrill我假设您有一个填充表单的推荐对象,该表单上有一个对应于Recommension.category的隐藏字段在最初渲染窗体时,您已经设置了它的值。如果提交该表单失败,则希望控制器操作使用推荐对象的数据重新呈现该表单;其中存储了该类别值。这不会发生吗?如果您没有将类别作为推荐对象的属性-请确保通过attr_访问器将其添加为db列,或者通过迁移将其添加为db列。奖励和类别是一个HABTM,因此两者都有许多属性,因此我不能简单地添加attr_访问器,对吗?我必须提供重定向到新的推荐路径:award=>@award,返回找不到奖励的结果。。。