重定向回不同的对象

时间:2015-08-06 17:08:12

标签: ruby-on-rails

我在操作后重定向时遇到问题。 我的条件是这样的:
客户,志愿者和工作人员有很多近亲。创建新的近亲之后,我想重定向回特定客户/志愿者/员工的编辑页面。

我目前的解决方案就是这个。

要添加的链接

<%= link_to new_admin_people_next_of_kin_path(source: source,
source_id: source_id),
class: 'js-btn-add btn btn-success btn-sm' do %>
  Add New Next of Kin
<% end %>

,其中 来源=:客户/:员工/:志愿者
source_id = id(主键)或员工/志愿者/客户

我的新方法

def new
  @person = Person.new
  @person.source = params[:source]
  @person.source_id = params[:source_id]
end

稍后我会将source和source_id作为隐藏参数传递。

我的people_controller创建方法(因为亲属是个人)

def create
  if params[:source] == 'client'
    @client = Client.find(params[:source_id])
    @pnok = @client.people_next_of_kin.build
  elsif params[:source] == 'volunteer'
    @volunteer = Volunteer.find(params[:source_id])
    @pnok = @volunteer.people_next_of_kin.build
  elsif params[:source] == 'staff'
    @staff = Staff.find(params[:source_id])
    @pnok = @staff.people_next_of_kin.build
  else
    @pnok = PeopleNextOfKin.new
  end
  @person = @pnok.build_next_of_kin

  Person.transaction do
    @person.update_attributes(create_params)
    @person.save(validate: false)
  end
end

正如你所看到的,它并不是真正的干净和硬编码。我已阅读过多态路径,但我无法真正找到一种方法将其用于我的解决方案,因为我需要先建立一个新的亲属,我不能传入link_to或redirect_to中的对象,然后还有一个近亲没有保存在数据库中的问题,所以我不能使用person.find 任何解决方案?

2 个答案:

答案 0 :(得分:0)

从你的例子中看出你的意思有点困难。我猜你想要重定向回到工作人员/志愿者/客户页面,并且会有一个与NOK的父/子关系。

但是,目前还不清楚您的型号是什么样的。例如,您可能正在使用单表继承和多态,因为这些都是&#34; People&#34;,或者您可能在模型中具有关系。我认为解决方案取决于你采取的路径。

例如,您可以使用以下内容:

 def Client
   has_many :noks
 end

如果你有,你可以构建empty:nok记录,然后重定向回到:client,让Rails / ActiveRecord内部管理关系。例如,客户端#show页面可能有列出列举所有亲属的所有下一个亲属的地方。

总结:我认为你试图在控制器中做太多而不使用RoR支持的模型。

答案 1 :(得分:0)

对于多态关联我推荐这个截屏视频 http://railscasts.com/episodes/154-polymorphic-association-revised