首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3渲染操作

Rails 3渲染操作
EN

Stack Overflow用户
提问于 2012-08-17 21:58:57
回答 1查看 332关注 0票数 1

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

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

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

代码语言:javascript
复制
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方法时,新方法中的实例变量对视图不可用。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-17 22:03:26

Render :new就是这样做的:它呈现:new视图。它不会在控制器中执行new方法,因此无论从哪个方法调用render :new,都必须设置:new模板所需的实例变量。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12007277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档