19606


[![画像の説明をここに入力](https://i.stack.imgur.com/1Kc2V.png)](https://i.stack.imgur.com/1Kc2V.png)

RubyMineを使っていたら

> At most two instance variables should be shared between controller and view

という警告がでました。

  * [ruby - Rails: Share variables between controller and view - Stack Overflow](https://stackoverflow.com/questions/11277420/rails-share-variables-between-controller-and-view)
  * [ruby on rails - Passing only two variables between controller and view - best practice? - Stack Overflow](https://stackoverflow.com/questions/7051053/passing-only-two-variables-between-controller-and-view-best-practice)

まさに本家のものが該当しそうですが、書いてあることがほとんどわからないに近い状態です。


CC BY-SA 3.0
2015-12-03T04:35:57.760
19587
2015-12-03T22:09:42.427
2017-05-23T12:38:55.307
-1
9008
question
ruby-on-rails rubymine
At most two instance variables should be shared between controller and viewという警告


警告を訳すとこんな感じになります。

> コントローラとビューで共有するインスタンス変数は最大でも2つまでにしましょう。
>
> この警告は2つを超えるインスタンス変数がコントローラとビューで共有されている場合に表示されます。  
>  コントローラで扱うインスタンス変数は1つだけにすべきです。ただし、current_userの変数は2つ目の変数として加えても良いです。

本家SOには警告が発生する例として以下のようなコードが載っています。

[code]

    def list
      @codes = Code.order("created_at")
      @languages = Language.order('name').collect {|l| [l.name, l.coderay]}
    end
    
[/code]

この場合、コントローラで`@codes`と`@languages`の2つのインスタンス変数が登場していて、どちらもビューで使われています。  
「current_userの変数を除くと、コントローラで扱うインスタンス変数は1つにすべき」ということなので、警告を取り除きたい場合は設計を見直して`@codes`または`@languages`のどちらか一つだけにしなければいけません。


CC BY-SA 3.0
2015-12-03T22:09:42.427
19606
2015-12-03T22:09:42.427
85
19587
answer