我有一个归属模型,允许用户在我的网站上发布要出售或出租的对象。我最近更改了表单,使其成为一个多步骤表单:第一个表单询问对象的名称以及对象是出售还是出租,第二个表单询问对象的详细信息,字段取决于用户的选择.
我在 Rails 3.0.5 中使用 is_taggable,我的问题是 tag_list 从未保存在数据库中,因为我切换到多步骤表单(所有其他字段都正确保存)。
我跟着 Ryan Bates Rails 演员 #217。
之前,我使用的是:@belonging.tag_list = params[:belonging][:tag_list]
由于我从多步开始,我正在使用:@belonging.tag_list = session[:belonging_params][:tag_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
非常感谢任何线索!