Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用多步骤表单时无法保存标记列表_Ruby On Rails_Forms_Tagging_Multi Step - Fatal编程技术网

Ruby on rails 使用多步骤表单时无法保存标记列表

Ruby on rails 使用多步骤表单时无法保存标记列表,ruby-on-rails,forms,tagging,multi-step,Ruby On Rails,Forms,Tagging,Multi Step,我有一个归属模型,允许用户在我的网站上发布要出售或租赁的对象。我最近更改了表单,使其成为一个多步骤表单:第一个表单询问对象的名称,如果对象是出售或出租的,第二个表单询问对象的详细信息,字段取决于用户的选择 我在Rails 3.0.5中使用的是is_taggable,我的问题是,自从我切换到多步骤表单以来,tag_列表从未保存在数据库中(所有其他字段都正确保存) 我跟随了Ryan Bates Rails的演员阵容 以前,我使用的是:@attribution.tag\u list=params[:a

我有一个归属模型,允许用户在我的网站上发布要出售或租赁的对象。我最近更改了表单,使其成为一个多步骤表单:第一个表单询问对象的名称,如果对象是出售或出租的,第二个表单询问对象的详细信息,字段取决于用户的选择

我在Rails 3.0.5中使用的是is_taggable,我的问题是,自从我切换到多步骤表单以来,tag_列表从未保存在数据库中(所有其他字段都正确保存)

我跟随了Ryan Bates Rails的演员阵容

以前,我使用的是:
@attribution.tag\u list=params[:attribution][:tag\u list]

因为我使用了multistep,所以我使用了:
@attribute.tag\u list=session[:attribute\u params][:tag\u list]

我在Rails方面有点新手,所以这里可能有一些明显的东西我遗漏了。我花了整整一个下午和一个晚上的时间试图弄明白哪里出了问题,因此,任何帮助都将不胜感激

以下是我的控制器的“新建”和“创建”操作:

class BelongingsController < ApplicationController
  before_filter :authenticate_user!, :except => [:index, :with_tag, :remove_tag]
  after_filter :update_tag_cloud, :only => [:create, :update]

  def new
    @title = "Insert a new product or service"
    @user = current_user
    session[:belonging_params] ||= {}
    session[:belonging_step] = nil
    @belonging = @user.belongings.new(session[:belonging_params])
    session[:belonging_params][:tag_list] ||= []
    @belonging.current_step = session[:belonging_step]
    render 'new'
  end

  def create
    session[:belonging_params].deep_merge!(params[:belonging]) if params[:belonging]
    @belonging = current_user.belongings.build(session[:belonging_params])
    @belonging.current_step = session[:belonging_step]
    @belonging.tag_list=session[:belonging_params][:tag_list]
    if params[:previous_button]
      @belonging.previous_step
      render 'new'
    elsif params[:cancel_button]
      session[:belonging_step] = session[:belonging_params] = nil
      redirect_to user_path(current_user)
    elsif params[:continue_button]
      if @belonging.last_step?
        if @belonging.save!
          expire_fragment('category_list')
          flash[:success] = "New product or service created!"
          session[:belonging_step] = session[:belonging_params] = nil
          redirect_to belonging_path(@belonging)
        else
          flash[:error] = "Object could not be saved"
          render 'new'
        end
      else
        @belonging.next_step
        render 'new'
      end
    else
      render 'new'
    end
    session[:belonging_step] = @belonging.current_step
  end
类归属控制器[:index,:with_标记,:remove_标记]
在\u filter:update\u tag\u cloud之后,:only=>[:create,:update]
def新
@title=“插入新产品或服务”
@用户=当前用户
会话[:归属参数]| |={}
会话[:所属步骤]=无
@归属=@user.properties.new(会话[:归属参数])
会话[:所属参数][:标记列表]| |=[]
@归属.current\u step=会话[:归属\u step]
呈现“新”
终止
def创建
会话[:所属参数]。深度合并!(参数[:归属])如果参数[:归属]
@归属=当前用户。归属。生成(会话[:归属参数])
@归属.current\u step=会话[:归属\u step]
@归属.标记列表=会话[:归属参数][:标记列表]
如果参数[:上一个按钮]
@属于上一步
呈现“新”
elsif参数[:取消按钮]
会话[:归属\u步骤]=会话[:归属\u参数]=nil
重定向到用户路径(当前用户)
elsif参数[:继续按钮]
如果@att归属。最后一步?
如果@attenting.save!
过期\u片段(“类别\u列表”)
flash[:success]=“已创建新产品或服务!”
会话[:归属\u步骤]=会话[:归属\u参数]=nil
将_重定向到所属路径(@behing)
其他的
flash[:错误]=“无法保存对象”
呈现“新”
终止
其他的
@下一步
呈现“新”
终止
其他的
呈现“新”
终止
会话[:归属\u步骤]=@attribution.current\u步骤
终止

非常感谢您提供的任何线索

我实际上认为:

session[:belonging_params].deep_merge!(params[:belonging]) if params[:belonging]
将复制params[:归属]中的所有内容,但似乎params[:归属][:tag_list]并没有像我预期的那样复制到会话[:归属_params][:tag_list]中

因此,通过在“创建”操作中添加一个新的会话变量,问题得以解决:

session[:tag\u list]=参数[:归属][:tag\u list]
以便能够从表单的一个步骤到下一个步骤保存
:tag\u list

会话[:tag_list]
首先在“新建”操作中定义为:

session[:tag_list] ||= []