避免将相同的参数传递给同一个类中的多个方法

时间:2015-04-03 08:03:11

标签: ruby-on-rails ruby

我可以运行多个方法,在轨道上的ruby中有一个数据,这是我的例子:

在我的控制器中:

def update
 item = Content::Video.find(params[:video_id])
 data = Data.new(params[:data])
 video_name = item.content
  #example: item,data and video_name != nil

 update_content(data)
 update_resouce_item(data, item)
 update_video_content(data, item, video_name)
end

private
def update_content(data)
.....
end

def update_resouce_item(data, item)
....
end

def update_video_content(data, item, video_name)
....
end

通常,要运行这些方法:update_content,update_resouce_item,update_video_content,我必须调用" data"每种方法三次,但我只想打电话给#34;数据"一次并用它运行所有方法。我可以在轨道上的红宝石中做到吗?请!告诉我:))

1 个答案:

答案 0 :(得分:0)

您可以使用实例变量在同一个控制器中共享变量:

def update
 item = Content::Video.find(params[:video_id])
 @data = Data.new(params[:data])
 video_name = item.content
  #example: item,data and video_name != nil

 update_content(data)
 update_resouce_item(item)
 update_video_content(item, video_name)
end

private
def update_content()
    @data # data is available as @data
end

def update_resouce_item(item)
    @data # data is available as @data
end

def update_video_content(item, video_name)
    @data # data is available as @data
end

Rails还会将控制器中的实例变量导出到您的视图和帮助程序。

虽然将变量作为参数传递没有任何问题,但这更多"功能性"由于其明确的性质,风格往往具有很多优点。

在rails before_action中,过滤器通常用于设置由多个操作共享的变量。

before_action :set_data

def set_data
    @data = Data.find(params[:id])
end