2014-02-28 40 views
0

我試圖訪問一個變量在控制器中的觀點,但它總是返回零。這發生在我嘗試過的所有變量上。控制器代碼:從控制器變量總是返回nil鑑於/無法打開文件ROR

@hahaha = '20' 
puts @hahaha.inspect 

在控制器中返回20。現在,當我把它的觀點:

= @hahaha.inspect 

它返回零。我會很高興,如果有人有一個想法.. 另一件事 - 當我調用File.open(文件)的電腦板我總是出現以下錯誤:

No such file or directory @ rb_sysopen the_file 

,我想我有一個錯誤的目錄要搜索的文件。但是我應該把它放在哪個默認目錄下?我找遍..

這是控制器代碼(我測試不同的東西,所以我知道這是一個有點亂.. XD)在諮詢

class WelcomeController < ApplicationController 
    def create 
     begin 
     @post = Post.new(params[:post]) 
     rescue Exception => e 
      if e.message == 'too large' 
       redirect_to news_path(err: 'file') 
      else 
       raise e 
      end 
     end 
    end 

    def fileSave  
     @code.save 
     @code.store!(params[:code]) 
    end 

    def update_db 
     #client = Client.find_by(id: 2) 
     #client.destroy 
    end 

    def ip 
     @user_ip = request.remote_ip() 
    end 

    def ha 
     @haha = 'opa' 
    end 

    def renderSlim 
     contents ='article 
    | Glad you tried this app, hope you enjoyed the ride. 
    br 
     | If you did, you can hit the approval button below. 

#enjoy-div 
    button 
     div 
     span' 

     @he = Slim::Template.new {contents} 
     @he.render 
    end 

end 

class Env 
    attr_accessor :name 
end 


env = Env.new 
env.name = "test this layout" 

contents = ' 
article 
    | Glad you tried this app, hope you enjoyed the ride. 
    br 
     | If you did, you can hit the approval button below. 

#enjoy-div 
    button 
     div 
     span' 

layout = ' 
html 
    body' 

# Create new template object with the layout 
l = Slim::Template.new { layout } 

# Render the contents passing in the environment: env 
# so that it can resolve: = name 
c = Slim::Template.new { contents } 
puts l.render 
@hahaha = '20' 
puts @hahaha.inspect 
File.open('_enjoy.html.slim') 

感謝。 {:

+3

你應該把這個問題放在兩個不同的問題上。 –

+2

你在哪個動作中設置變量,還要共享控制器?並在哪個視圖中訪問它。請分享更多的代碼。 –

+0

是的,我應該把這個在兩個不同的問題,但你看,我猜不會有很多這樣的答案... 基爾提 - 我設置任何類的外部變量,因此在「虛無」。我在Welcome視圖中訪問它,並且這是Welcome控制器。我不認爲從控制器的其他代碼是必要的,但我會用它更新答案。 – victor175

回答

0

並非所有控制器的變量是在視圖中使用。

當你調用一個控制器動作,運行過濾器和回調後,它會運行一個動作裏面的所有代碼,然後它會嘗試呈現的東西。默認情況下,Rails將在控制器文件夾中查找與您的操作名稱相匹配的視圖。一旦這種觀點裏面,它不會回來控制器,直到另一個動作被召喚

這一觀點將有機會獲得在該訴訟的任何實例變量,只有行動。


所以基本上你需要設置一個動作裏面@hahaha變量,將呈現所需的視圖

例子:

Controller.rb

class Controller < ApplicationController 

     def action 
     @defined_inside_action = "bar" 
     end 

     def some_method 
     @defined_inside_some_method = "foo" 
     end 

    end 

Action.html.erb

<%= @defined_inside_action %> #=> bar 

    <%= @defined_inside_some_method %> #=> nil 
+0

那麼我犯了一個功能: '高清initializer' '\t @hahaha =「20'' '\t放@ haha​​ha.inspect' 'end' 我試圖把它的WelcomeController類外。仍然沒有結果 – victor175

+0

@ user1945458在這個視圖中,你是否試圖訪問該變量? –

+0

'你'是什麼意思? – victor175

相關問題