我有两个型号
thing.rb
has_one :subthing
subthing.rb
belongs_to :thing
并使用
进行路由resources :thing do
resource :subthing
end
resources :subthing
然而,我的控制器上的show方法
def show
@subthing = Subthing.find(params[:id])
end
当我访问时
http://example.org/things/1/subthing
给我一个错误
找不到没有ID的Subthing
我觉得这应该由框架来处理......也就是说应该知道相关的Subthing是属于Thing的那个。
我是否遗漏了某些东西,或者我不能在这里为Subthings使用相同的控制器方法,而当它们属于某个东西时可以使用Subthings。
或者我是否需要明确地告诉控制器每个潜在的关联。即
def show
if params[:thing_id].present?
@subthing = @thing.find(params[:thing_id]).subthing
else
@subthing = Subthing.find(params[:id])
end
end
答案 0 :(得分:1)
如果您打算对嵌套资源和顶级资源使用相同的SubthingsController
,那么是的,您需要按照建议进行操作:
def show
if params[:thing_id].present?
@subthing = @thing.find(params[:thing_id]).subthing
else
@subthing = Subthing.find(params[:id])
end
end
但是你的控制器变得非常复杂并且不值得。您最好重新定义路线或使用两个独立的控制器。