2014-03-07 41 views
0

我正在使用select選項來根據類別/域/資格來選擇和排序事件。我有點卡在如何實現它。在rails中選擇用法

<%= form_tag refresh_path, :method => :get do %> 
    <%= select("category", "category_id", Category.all.collect {|p| [ p.name, p.id ] }, {include_blank: 'Choose Category'}) %> 
    <%= select("domain", "domain_id", Domain.all.collect {|p| [ p.name, p.id ] }, {include_blank: 'Choose Domain'}) %> 
    <%= select("eligible", "eligible_id", Eligible.all.collect {|p| [ p.name, p.id ] }, {include_blank: 'Choose Eligibility'}) %> 
    <%=submit_tag "Refresh"%> 
<% end %> 

我想要做的刷新控制器

class RefreshController < ApplicationController 
    def index 
    @cat = Category.find(category.category_id) 
    @events = @cat.events 
    ........ 
    ........ 
    end 
end 

我應該如何選擇發送到控制器參數內的所有把戲。特別是我的情況。選擇標籤非常混亂。我希望發送類別的實際ID,而不是值。

類別具有以下屬性:'name'和'id'。相同的域名和資格

任何幫助將不勝感激!

+0

你有「事件」模型和類別/域/合格模型之間的關係嗎?您可能想要發佈更多代碼... –

+0

究竟是什麼問題?你抱怨了一些東西,但你沒有確切地說出發生了什麼不同於你的預期。你沒有得到控制器中的參數嗎? – depa

+1

我認爲你缺少的語法是'@events = Category.find(params [:category] ​​[:category_id])',但是這裏假設你想讓@event填充「Category」對象,它看起來不像合理。然而正如其他人所說,你不提供任何關於你的模式的信息,所以很難知道你想要什麼。 –

回答

0

假設你的模式是這樣的(你不說,所以這是很難說):

#fields: category_id, eligible_id, domain_id 
class Event 
    belongs_to :category 
    belongs_to :eligible 
    belongs_to :domain 

class Category 
    has_many :events 

class Eligible 
    has_many :events 

class Domain 
    has_many :events 

Rails的.find方法允許你傳遞一個字段1 {=> required_value,字段2 => required_value }哈希條件,所以你可以把它像這樣:

@events = Event.find(:all, :conditions => {:category_id => 123, :eligible_id => 456, :domain_id => 789}) 

所以,如果你在你的參數有這樣的事情

params => {:events => {:category_id => 123, :eligible_id => 456, :domain_id => 789}} 

你可以說

@events = Event.find(:all, :conditions => params[:events]) 

這是很好,乾淨。

這需要你改變你的形式,像這樣:

<%= select("events", "category_id", ... 
<%= select("events", "eligible_id", ... 
<%= select("events", "domain_id", ... 

但是,如果他們不選擇任何這些,他們會來通過爲空字符串,該條件將專門尋找(而你實際上只是不關心這個標準)。所以,你可以從參數中去掉這些散列。

@events = Event.find(:all, :conditions => params[:events].reject{|k,v| v.blank?})