我有一个名为studies
的模型。
行动重定向redirect_to edit_study_path(@new_study)
后,
网址:http://localhost:3000/studies/2/edit
。
是否有通过id
后自定义网址?
例如,http://localhost:3000/study
(仍然进入编辑路径,并且仍然使用参数中的:id
)
答案 0 :(得分:2)
我想你想要的是编辑当前的研究?
在这种情况下,可以在路线中使用ressource
代替ressources
。
我们举个例子:
#in routes.rb
resources :studies
resource :study
默认情况下,它们都会链接到StudiesController并调用相同的操作(例如,在您的情况下编辑),但是在两个不同的路径中
get "/studies/:id/edit" => "studies#edit"
get "/study/edit" => "studies#edit"
在编辑操作中,您应该设置正确处理参数:
def edit
@study = params[:id].nil? ? current_study : Study.find(params[:id])
end
请注意,您需要在某处使用current_study方法,并将current_study存储在Cookie /会话中以使其正常工作。
示例:
# In application_controller.rb
def current_study
@current_study ||= Study.find_by(id: session[:current_study_id]) #using find_by doesn't raise exception if doesn't exists
end
def current_study= x
@current_study = x
session[:current_study_id] = x.id
end
#... And back to study controller
def create
#...
#Eg. setup current_study and go to edit after creation
if study.save
self.current_study = study
redirect_to study_edit_path #easy peesy
end
end
快乐编码,
亚辛。