Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 构建以下内容最像rails的方式是什么_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 构建以下内容最像rails的方式是什么

Ruby on rails 3 构建以下内容最像rails的方式是什么,ruby-on-rails-3,Ruby On Rails 3,我在我的应用程序中为两种不同类型的用户使用Desive。他们被称为用户和专业人员 我目前有一个简单的基于资源的控制器,名为MessagesController,它可以为当前的专业人员(如 class MessagesController < ApplicationController def index @messages = Message.find_all_by_profession_id(current_professional.id) end end

我在我的应用程序中为两种不同类型的用户使用Desive。他们被称为用户和专业人员

我目前有一个简单的基于资源的控制器,名为MessagesController,它可以为当前的专业人员(如

class MessagesController < ApplicationController
    def index
       @messages = Message.find_all_by_profession_id(current_professional.id)
    end
end

但这在所有行动中都是庞大而混乱的。我相信一定有更好的办法。最像rails的方法是什么?我应该创建一个全新的控制器来处理基于用户的消息吗

我可以想出两种方法:

您可以将代码放入控制器的
initialize
方法中:

def initialize
  if current_user
      @messages = Message.find_all_by_user_id(current_user.id)
  else
      @messages = Message.find_all_by_profession_id(current_professional.id)
  end
  super
end
或者您可以在过滤器之前创建

class MessagesController < ApplicationController
  before_filter :get_messages
  private
  def get_messages
     if current_user
       @messages = Message.find_all_by_user_id(current_user.id)
     else
       @messages = Message.find_all_by_profession_id(current_professional.id)
     end
  end
end
class messages控制器
IMHO,我认为您可以将这段代码移动到模型中,这样控制器只通过传递用户参数进行调用,并从模型中获取所有消息

# messsages_controller.rb
@messages = Message.find_all_messages(current_user, current_professional)

# message.rb
def self.find_all_messages(user, professional)
  if user
    self.find_all_by_user_id(user.id)
  else
    self.find_all_by_profession_id(professional.id)
  end
end
我认为这种代码最好出现在您的模型上。当然,您可以改进if/else代码,但我现在没有主意了

# messsages_controller.rb
@messages = Message.find_all_messages(current_user, current_professional)

# message.rb
def self.find_all_messages(user, professional)
  if user
    self.find_all_by_user_id(user.id)
  else
    self.find_all_by_profession_id(professional.id)
  end
end