在RAILS中将模型从一个控制器动作传递到另一个控制器动作的替代方法

时间:2013-12-12 01:55:00

标签: ruby-on-rails ruby view model controller

我在同一个控制器中有大约6-7个不同的动作,每个视图加载都会受到影响。我现在如何做到这一点就是这样:

person_id会传入网址。

persons_controller

person_id = params[:person_id]
people = PersonSearch.where(:person_id => person_id)
@response_people = people.map do |p|
  {
      :name => p.name,
      :age => p.age
  }

上面的代码片段是在我的控制器中用6-7个动作编写的,这相当于我需要显示{7}个nameage的6-7个视图。

我如何在第一个视图中通过ID查看此人,然后通过每个操作跟踪特定的person模型,而无需查看他并使用.map方法?

1 个答案:

答案 0 :(得分:0)

创建一个像这样的函数

def set_person
     person_id = params[:person_id]
     people = PersonSearch.where(:person_id => person_id)
     @response_people = people.map do |p|
     {
           :name => p.name,
           :age => p.age
     }
end

然后在控制器的顶部添加此项,但替换:show和:使用您想要设置人员的控制器操作进行编辑。

before_action :set_person, only: [:show, :edit]

这将在您指定的每个操作之前运行set_person函数,因为您可以在视图中访问@response_people