1

私が取り組んでいるRails3アプリでは、ユーザーが(クーポンコードを入力して)アカウントを「アクティブ化」し、情報を入力すると、アカウントが作成されます。

コードを複製せずに解決する方法がわからないという小さな問題が発生しています(これは雄弁ではないようです)。

これが私の現在のアクティベーションコントローラーです:

class ActivationsController < ApplicationController
  respond_to :html
  skip_before_filter :set_client, :only => [:welcome]

  def new
    @user = User.new
    @gc = get_group_code(params[:group_code])

    if @gc.nil? || @gc.group.school_info.blank?
      @countries = Country.all
      @school_types = SchoolType.all
      @states = State.all
    else
      @school_information = @gc.group.school_info
    end

    @user_type = UserType.find_by_type("Classroom Teacher")
  end

  def create
      @user = User.new(params[:user].except(:custom))

      if @user.save
        @group = Group.find(params[:group_id])
        @user.groups << @group
        @user.update_mail_chimp_sponsors
        UserMailer.welcome_email(@user, current_client).deliver
        sign_in @user
        redirect_to new_activation_welcome_path
      else
        render :new
      end
  end

  def welcome
    @user = current_user
  end

  private

    def get_group_code(code = "")
      group_code = GroupCode.find_by_code(code)

      unless group_code.nil?
        group_code.validate_code(current_client.name)
        group_code
      end
    end
end

私が遭遇している問題は、31行目(render :new)にあります。フォームにエラーがあり、アプリがメソッドをレンダリングするnew場合、新しいメソッドのインスタンス変数はビューで使用できません。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

2

Render:newはまさにそれを行います::newビューをレンダリングします。コントローラで新しいメソッドを実行しないため、render:newを呼び出すメソッドでは、:newテンプレートに必要なインスタンス変数を設定する必要があります。

コードを複製したくない場合は、インスタンス変数の設定をコントローラーのプライベートメソッドに移動できます。次に、新しいメソッド、および:newをレンダリングする他のメソッドからプライベートメソッドを呼び出すことができます。

于 2012-08-17T14:03:26.080 に答える