2012-05-15 3 views
0

사용자가 내 웹 사이트에서 판매하거나 대여 할 개체를 게시 할 수있는 소속 모델이 있습니다. 나는 최근 양식을 변경하여 여러 단계 형식으로 만들었습니다. 첫 번째 양식은 개체의 이름을 묻습니다. 개체가 판매 또는 임대중인 경우 두 번째 양식은 개체의 세부 사항을 묻고 필드는 사용자의 선택에 따라 달라집니다 .다단계 양식을 사용할 때 tag_list를 저장할 수 없습니다.

레일 3.0.5와 함께 is_taggable을 사용하고 있는데, 다단계 양식 (다른 모든 필드가 올바르게 저장 됨)으로 전환 한 이후로는 tag_list가 데이터베이스에 저장되지 않습니다.

나는 Ryan Bates Rails 캐스트 # 217을 따라 갔다.

하기 전에, 내가 사용했다 : @belonging.tag_list = session[:belonging_params][:tag_list]

나는 레일에서 초보자의 비트입니다, 그래서 내가 여기에 놓친 거지 분명 뭔가가있을 수 있습니다 : 나는 다단계에서 된 이후 @belonging.tag_list = params[:belonging][:tag_list]

, 내가 사용하고 . 나는 오후와 저녁에 무엇이 잘못되었는지 이해하려고 노력 했으므로 어떤 도움을 주시면 감사하겠습니다!

여기

내 컨트롤러의 '생성' '새로운'행동은 다음과 같습니다 단서에 대한

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 

많은 많은 감사!

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

모든 것을 내부 PARAMS가 복사합니다 :

답변

0

가 실제로 생각 [: 속하는]하지만 그 PARAMS 보인다 [: 속하는] [: tag_list]가 세션으로 복사되지 않았습니다 [: belonging_params] [: tag_list 내가 예상대로] ...

그래서 문제는 '생성'행동에 새 세션 변수를 추가하여 해결되었다 :

session[:tag_list] = params[:belonging][:tag_list] 다음 폼의 단계에서 :tag_list을 절약 할 수.

session[:tag_list] ||= [] 
:

session[:tag_list] 같이 '새'액션 제 정의