2016-04-02 26 views
-1

studiesというモデルがあります。アクションリダイレクトredirect_to edit_study_path(@new_study)(Rails)編集URLから「id」を取得する方法

URL:http://localhost:3000/studies/2/edit

idを渡した後にURLをカスタマイズする方法はありますか?例えば

http://localhost:3000/study は(まだのparamsで:idでまだ編集パスに行く、と)

+0

私はそうは思わない、任意のパラメータを渡すことなく。 – 7urkm3n

+0

私は否定的な投票についてフィードバックを得ることはできますか?どのようにして質問を改善できますか? – Mirror318

答えて

2

私はあなたが何をしたいと思います現在の研究を編集するのですか?

この場合、経路にressourcesの代わりにressourceを使用することができます。

のは、例を持ってみましょう:(あなたのケースで編集など。)それらの

#in routes.rb 
    resources :studies 
    resource :study 

の両方がStudiesControllerへのデフォルトのリンクで、同じアクションを呼び出しますが、2つの異なる経路

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をクッキー/セッションに保存します。

例:

# 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 

ハッピーコーディング、

Yacine。

+0

なぜあなたはまだパラメータをチェックしていますか? idをparamsに入れるのは何ですか? – Mirror318

+1

'/ studies /:id/edit'と'/study/edit'の2つのルートを編集したいと思っています。 paramsのないルートしかない場合は、チェックを無視して "current_study"に直接進みます;-) – Yacine

関連する問題