Help us understand the problem. What is going on with this article?

【Ruby on Rails】インスタンス変数がViewに渡らない

More than 1 year has passed since last update.

2018/05/08 追記

あれこれ書いてますが問題解決したので追記。

development.rb
config.reload_classes_only_on_change = false;

これ追加したら↓が解決した。

ほんとシンプルなコードではまる

posts_controller.rb
class PostsController < ApplicationController

  def index
    @posts = Post.all
  end

end
index.html.erb
<% @posts.each do |post| %>
  <%= post.title %><br>
<% end %>

index.html.erbの方で@postsがnilだと怒られる。
コントローラーからビューに変数が渡らないぞー

ちなみに環境

  • Windows 10
  • Vagrant + VirtualBox
  • CentOS 6.9
  • Ruby 2.4.0
  • Rails 5.1.3

Pumaサーバーを再起動したら治った

rails s -b 0.0.0.0

Pumaサーバー立ち上げっぱなしで作業していたんですが
そうするとインスタンス変数の変更は反映されないんですか?

まじか。。。
そんなばかな。。。

と思うわけだが
事実サーバー再起動すると変更が反映され
再起動しない限り反映されないのだ。

いろいろ試したところ、サーバー立ち上げっぱなしでも

  • viewの変更は反映される。
  • コントローラーの変更は反映されない。

という振る舞い。

サーバー立ち上げた時点でrb側はプリコンパイルされてるんかな
実行速度考えればそっちのがいいと思うけど
そういう仕様なのかな?
俺の環境がふぁびょってるのかな

うーんわからん

追記、根本的な解決方法はまだわからないけれど

Vagrantの共有フォルダにプログラム一式を置いていることが影響しているっぽい。
ちなみに共有フォルダはリアルタイムに同期されるプラグインvagrant-vbguestを導入している。

railsアプリを作るときはこんな感じでやっていた

cd /vagrant
rails new myapp
cd ~/
ln -s /vagrant/myapp myapp

railsのアプリ一式は共有フォルダに置き
homeにシンボリックリンクmyappを作っている。

試しに

cd ~
rails new hoge

としてファイルの実態もhomeに置き適当なページを作って試したところ
Pumaサーバーを再起動せずともcontrollerの変更が検知された。

共有フォルダのパーミッションかユーザー、グループあたりの問題だろうか?

viewもcontrollerもパーミッションは同じ。だのに
viewの変更は反映されて、controllerの変更は無視される
ということで

Linuxとはお戯れ程度の付き合いしかない俺にはまだ難しいようです。

Nekonecode
◆将来の夢 プログラムの先生 ◆経歴 Web屋→ゲーム屋→フリー→正社員+フリー
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした