Ruby on rails 3 Rails 3渲染操作

Ruby on rails 3 Rails 3渲染操作,ruby-on-rails-3,renderaction,Ruby On Rails 3,Renderaction,在我正在开发的Rails 3应用程序中,我们允许用户“激活”一个帐户(通过键入优惠券代码),然后他们键入自己的信息,瞧,他们的帐户被创建了 我遇到了一个小问题,我不清楚如何在不重复代码的情况下解决它(这似乎没有说服力) 这是我当前的激活控制器: class ActivationsController < ApplicationController respond_to :html skip_before_filter :set_client, :only => [:welco

在我正在开发的Rails 3应用程序中,我们允许用户“激活”一个帐户(通过键入优惠券代码),然后他们键入自己的信息,瞧,他们的帐户被创建了

我遇到了一个小问题,我不清楚如何在不重复代码的情况下解决它(这似乎没有说服力)

这是我当前的激活控制器:

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
类激活控制器[:欢迎]
def新
@user=user.new
@gc=获取组代码(参数[:组代码])
如果@gc.nil?||@gc.group.school\u info.blank?
@countries=Country.all
@学校类型=学校类型。全部
@states=State.all
其他的
@学校信息=@gc.group.school\u info
结束
@用户类型=用户类型。按类型查找(“课堂教师”)
结束
def创建
@user=user.new(参数[:user]。除了(:自定义))
如果@user.save
@group=group.find(参数[:group\u id])

@user.groupsRender:new正是这样做的:它渲染:new视图。它不会在控制器中执行新方法,因此在从中调用render:new的方法中,必须设置:new模板所需的实例变量

如果不想复制代码,可以将实例变量的设置移动到控制器中的私有方法。然后可以从新方法调用私有方法,以及从中渲染的任何其他方法:new