51746


Railsで`link_to("○","□")`でurlの記入場所`□`に`params[:id]`は使用できないのですか?  
paramsはコントローラーでしか使用できないのでしょうか?


CC BY-SA 4.0
2019-01-06T01:46:02.483
51745
2019-01-06T11:48:55.710
2019-01-06T11:48:55.710
3068
31678
question
ruby-on-rails
paramsの使い方について


viewで`link_to`の引数に`params`を用いることができないのか、という認識でおります。

railsではcontrollerからviewに変数を渡すには、controllerでインスタンス変数として定義する必要があります。

`params[:id]`のみをviewに渡したいのであれば、以下のようにcontrollerで`params[:id]`を値に持つインスタンス変数を定義するとviewから使えるようになります。

controller

[code]

    ...
    def show
      @id = params[:id]
    end
    
[/code]

view

[code]

    <h1><%= @id %></h1>
    
[/code]

ただ、`link_to`に`params[:id]`を渡したいとのことですが、そのままidをviewに渡すのではなく

  1. controllerで指定されたidを持つレコードを`find`
  2. 返却されたオブジェクトをインスタンス変数として定義
  3. viewで`<model>_path(@<instance_variable>)`でURLを生成

というやり方が一般的かと思われます。

rails tutorialsの例([Rails のルーティング | Rails
ガイド](https://railsguides.jp/routing.html#%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%83%91%E3%82%B9%E3%82%84url%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B))を参考にすると、

route

[code]

    get '/patients/:id', to: 'patients#show', as: 'patient'
    
[/code]

controller

[code]

    @patient = Patient.find(params[:id])
    
[/code]

view

[code]

    <%= link_to 'Patient Record', patient_path(@patient) %>
    
[/code]

という具合にですね。


CC BY-SA 4.0
2019-01-06T02:19:01.447
51746
2019-01-06T02:19:01.447
31669
51745
answer