如何解决生成多个模型引用的嵌套资源的编辑路径
|| 在routes.rb中:resources :cars do
resources :reviews
end
resources :motorcycles do
resources :reviews
end
在ReviewsController中:
before_filter :find_parent
def show
@review = Review.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @review }
end
end
def edit
@review = Review.find(params[:id])
end
# ...
def find_parent
@parent = nil
if params[:car_id]
@parent = Car.find(params[:car_id])
elsif params[:motorcycle_id]
@parent = Motorcycle.find(params[:motorcycle_id])
end
end
为评论生成\“ show \”链接很简单(这可行):
= link_to \"Show\",[@parent,@review]
同样,我想为评论引用一个通用的编辑路径,例如(这不起作用):
= link_to \"Edit\",@review],:action => \'edit\'
有谁知道这是否可能,如果没有,那怎么实现?
解决方法
link_to \'Edit Review\',[:edit,@parent,@review]
, 事实证明,我正在寻找的答案可以通过URL帮助器“ edit_polymorphic_path \”找到(请参阅:http://rubydoc.info/github/rails/rails/master/ActionDispatch/Routing/PolymorphicRoutes)。为了获得上面我尝试的链接,我能够使用以下方法实现此目的:
edit_polymorphic_path([@parent,@review])
, 我认为您这里需要的是多态关联。 Railscasts.com的Ryan Bates完美地解释了这一点。
http://railscasts.com/episodes/154-polymorphic-association
它使您轻松拥有以下内容:
用户,经理,备注
用户可以有很多笔记
经理可以有很多笔记
笔记可以属于用户或经理
用户/ 1 /注释/编辑
经理/ 1 /笔记/编辑
Railscast将解释如何做:)
编辑:
def edit
@reviewable= find_reviewable
@reviews= @reviewable.reviews
end
private
def find_reviewable
params.each do |name,value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
然后在您的链接中,它将类似于:
link_to \'Edit Review\',edit_review_path([@reviewable,:reviews])
^^未测试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。