如果boolean为true,Rails如何控制器重定向?

时间:2017-04-06 00:00:59

标签: ruby-on-rails ruby ruby-on-rails-3

我尝试创建一个对象并将布尔值设置为true并在此之后重定向 在任何情况下,日志显示错误。

有人知道怎么办?

class BrandsController < ApplicationController

  def new
    @brand = current_user.build_brand(params[:brand])
  end

  def create
    @brand = current_user.build_brand(params[:brand])


    if @brand.save

      redirect_to "#{new_user_path}?branded=#{@current_user.branded[1]}"

flash[:success] = "thank's".html_safe
    end

  end
end

1 个答案:

答案 0 :(得分:0)

我不确定那里有什么问题,但是有些事情并没有在正确的Rails风格中完成。这是一个更传统的返工版本:

class BrandsController < ApplicationController
  before_action :build_brand, only: [ :new, :create ]

  def new
  end

  def create
    @brand.save!

    flash[:success] = "Thanks!"

    redirect_to new_user_path(branded: @current_user.branded[1])

  rescue ActiveRecord::RecordInvalid
    render(action: :new)
  end

protected
  def build_brand
    @brand = current_user.build_brand(params[:brand])
  end
end

如果出现问题,使用save!会生成异常,因此您可以完全避免使用if。然后,您可以通过重新呈现表单来处理无法保存的情况。您还可以将重复的代码移动到before_action处理程序中,您可以在其中执行一次。

引用html_safe时,将flash[:success]来电转移到模板中。现在逃离现在还为时过早。在某些情况下,您可能会发送JSON而不是HTML格式。