我在操作后重定向时遇到问题。
我的条件是这样的:
客户,志愿者和工作人员有很多近亲。创建新的近亲之后,我想重定向回特定客户/志愿者/员工的编辑页面。
我目前的解决方案就是这个。
要添加的链接
<%= 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 任何解决方案?
答案 0 :(得分:0)
从你的例子中看出你的意思有点困难。我猜你想要重定向回到工作人员/志愿者/客户页面,并且会有一个与NOK的父/子关系。
但是,目前还不清楚您的型号是什么样的。例如,您可能正在使用单表继承和多态,因为这些都是&#34; People&#34;,或者您可能在模型中具有关系。我认为解决方案取决于你采取的路径。
例如,您可以使用以下内容:
def Client
has_many :noks
end
如果你有,你可以构建empty:nok记录,然后重定向回到:client,让Rails / ActiveRecord内部管理关系。例如,客户端#show页面可能有列出列举所有亲属的所有下一个亲属的地方。
总结:我认为你试图在控制器中做太多而不使用RoR支持的模型。
答案 1 :(得分:0)