我可以运行多个方法,在轨道上的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;数据"一次并用它运行所有方法。我可以在轨道上的红宝石中做到吗?请!告诉我:))
答案 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