4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-04-15

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とはお戯れ程度の付き合いしかない俺にはまだ難しいようです。

4
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?