0

私は、ユーザーが自分の Web サイトで販売またはレンタルするオブジェクトを投稿できる所属モデルを持っています。私は最近フォームを変更し、複数ステップのフォームにしました。最初のフォームはオブジェクトの名前を尋ね、オブジェクトが販売用かレンタル用かを尋ね、2 番目のフォームはオブジェクトの詳細を尋ねます。フィールドはユーザーの選択に応じて異なります。 .

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

手がかりに感謝します!!

4

1 に答える 1

0

私は実際に次のように考えました。

session[:belonging_params].deep_merge!(params[:belonging]) if params[:belonging]

params[:belonging] 内のすべてをコピーしますが、params[:belonging][:tag_list] が session[:belonging_params][:tag_list] にコピーされていないようです...

したがって、「作成」アクションに新しいセッション変数を追加することで問題は解決しました。

session[:tag_list] = params[:belonging][:tag_list]:tag_listフォームのステップから次のステップに保存できるようにします。

session[:tag_list]'new' アクションで最初に次のように定義されます。

session[:tag_list] ||= []
于 2012-05-16T12:10:37.753 に答える