(Rails)如何获得' id'超出编辑网址

时间:2016-04-02 05:03:22

标签: ruby-on-rails ruby ruby-on-rails-4 url-routing

我有一个名为studies的模型。

行动重定向redirect_to edit_study_path(@new_study)后,

网址:http://localhost:3000/studies/2/edit

是否有通过id后自定义网址?

例如,http://localhost:3000/study (仍然进入编辑路径,并且仍然使用参数中的:id

1 个答案:

答案 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

快乐编码,

亚辛。