【问题标题】:How to remove redundant code in Rails controller?如何删除 Rails 控制器中的冗余代码?
【发布时间】:2012-02-25 05:30:57
【问题描述】:
def new
  @user = User.find(session[:this_user])
  @message = Message.new    
  @people= People.order("is_active DESC, first_name, last_name")
end

当创建动作验证失败时,我需要重新设置上述变量,创建一个如下所示的动作:

def create
  @message = Message.new(params[:message])  
  if @message.save
    redirect_to(messages_path, :notice => 'Message was successfully created.') 
  else
    @user = User.find(session[:this_user])
    @message = Message.new    
    @people= People.order("is_active DESC, first_name, last_name")
    render :action => "new" 
end

结束

删除冗余代码(并将其干燥)的正确方法是什么?

此外,如果验证失败,上述方法会导致表单忘记任何输入。有没有更好的方法让它记住输入的任何信息?

Rails 3.07,Ruby 1.9.2

【问题讨论】:

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


    【解决方案1】:

    @user = User.find(session[:this_user]) 放入before_action 中,如下所示:

    class SomeController
      before_action :set_session_user, :only => [:new, :create]
      def set_session_user
        @user = User.find(session[:this_user])
      end
    end
    

    @people= People.order("is_active DESC, first_name, last_name") 可能是scope,如下所示:

    class People < ActiveRecord::Base
      scope :sorted_by_active_and_name, -> { order("is_active DESC, first_name, last_name") }
    end
    People.sorted_by_active_and_name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 2016-08-02
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多