2011-01-31 34 views
1

這與previous question有關,但我認爲最好稍後將其分解以供可搜索性使用。從Rails選擇表格獲取用戶輸入

我有一個模型:

class FooModel < ActiveRecord::Base 
    MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'] 
end 

我有一個觀點:

<% form_for @foo, :url => {:action => 'bar'} do |f|%> 
    <%= select :range, :thing, FooModel::MONTHS%> 
    <%= f.submit "Submit" %> 
<% end %> 

而且我有一個控制器:

def index 
    @foo = FooModel.new 
    respond_to do |format| 
     format.html # index.html.erb 
    end 
end 

def bar 
    @events = params.inspect 

    respond_to do |format| 
    format.html # index.html.erb 
    end 
end 

我試圖訪問值應該通過下拉菜單通過許多不同的方式傳遞,但它似乎沒有得到通過。即使調用params.inspect也只會將@events設置爲一個空的散列。我懷疑我的流程有問題,或者被稱爲錯誤的方式,或者我打電話錯誤的時間。

當前索引是在那裏查看^^生活,當你點擊提交它調用欄。我是否需要以不同的方式傳遞變量?謝謝。

更新 也許這是一個主角。我相信我已經理解了模型和控制中發生了什麼,但是仍然有些東西讓我對這個觀點感到迷惑。在<%= select:range,:thing,FooModel :: MONTHS%> range和thing實際上指的是什麼?當我閱讀教程和最好的在線,因爲我可以告訴這些填充html值和名稱標籤的值,但我不知道其他許多。我需要在任何地方初始化它們嗎?他們是否特指什麼?

回答

1

爲此,最好使用常數。

  1. lib/initializers創建一個名爲constants.rb或任何你想
  2. 然後添加你不變,你的情況MONTHS見下面
  3. 代碼,那麼你可以訪問常量形式

In config/initializers/constants.rb

MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'] 

在您的視圖中:

<% form_for @foo, :url => {:action => 'bar'} do |f|%> 
    <%= f.select :month, options_for_select(MONTHS) %> 
    <%= f.submit "Submit", :disable_with => "Submitting..." %> 
<% end %> 

options_for_select只是爲選擇輸入格式化它。

+0

確保您重新啓動服務器。服務器啓動時加載`constans.rb`。 – s84 2011-01-31 22:33:36

-1

不幸的是,雖然我喜歡山姆的回答,它確實改善了我的代碼,但最終並不是我的問題的答案。令人感到沮喪的是,在我看來,我有一條調試線,用於查看控件運行後我得到的輸出結果,並從錯誤的變量中打印出來。簡單的複製/粘貼監督。

2

我試過了。我也試圖做常量方法。只有我,這是建立在我的FooModel

後我得到這個工作,我想它搬出constants.rb文件,並把它放在模型中的DB改變:month到列的名稱後的工作。道格是正確的,他說,我們可以通過訪問它

所以我的最終代碼看起來像這樣在這個實驗中,

型號:

class FooModel < ActiveRecord::Base 
    MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'] 
end 

查看:

<% form_for @foo, :url => {:action => 'bar'} do |f|%> 
    <%= f.select :month, options_for_select(FooModel::MONTHS) %> 
    <%= f.submit "Submit", :disable_with => "Submitting..." %> 
<% end %> 

控制器:

def index 
    @foo = FooModel.new 
    respond_to do |format| 
     format.html # index.html.erb 
    end 
end 

def bar 
    @events = params.inspect 

    respond_to do |format| 
    format.html # index.html.erb 
    end 
end 

在某一點上我可以看到使用共同的東西constant.rb像月,國家等,但對於這個有限的實驗,我想對它進行兩種測試。如果我使用constants.rb,我的View將如下所示。

查看是否使用constants.rb;

<% form_for @foo, :url => {:action => 'bar'} do |f|%> 
    <%= f.select :month, options_for_select(MONTHS) %> 
    <%= f.submit "Submit", :disable_with => "Submitting..." %> 
<% end %> 

@hector:希望這會有所幫助。