生成由多个模型引用的嵌套资源的编辑路径

the*_*one 10 resources routes nested ruby-on-rails

在routes.rb中:

resources :cars do
  resources :reviews
end

resources :motorcycles do
  resources :reviews
end
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

生成Review的"show"链接很简单(这可行):

= link_to "Show", [@parent, @review]
Run Code Online (Sandbox Code Playgroud)

类似地,我想引用一个用于评论的通用编辑路径,类似于(这不起作用):

= link_to "Edit", [@parent, @review], :action => 'edit'
Run Code Online (Sandbox Code Playgroud)

有谁知道这是否可能,或者如果不可能,如何实现这一目标?

Kho*_*yen 17

link_to 'Edit Review', [:edit, @parent, @review]
Run Code Online (Sandbox Code Playgroud)


the*_*one 16

事实证明,我正在寻找的答案可以通过URL帮助程序"edit_polymorphic_path"找到(参见:http://rubydoc.info/github/rails/rails/master/ActionDispatch/Routing/PolymorphicRoutes ).为了获得我在上面尝试的链接,我能够通过以下方式实现此目的:

edit_polymorphic_path([@parent, @review]) 
Run Code Online (Sandbox Code Playgroud)