2014-04-04 20 views
0

在視圖中我有以下選擇:正確地從模型的項目列表如何捕獲從collection_select

<%= collection_select(:menu, :postnumer, @menus, :postnumer_id, :postnumer, 
    options = {:prompt => "Veldu póstnúmer", :include_blank => "Ekkert valið"}, 
    html_options = {:class =>"menus", :multiple => true, :style => 'width:15%'}) %> 

選擇菜單顯示。但我一直無法弄清楚如何收集選定的項目。 任何人都可以幫忙嗎?

class MenusController < ApplicationController 

    def create 
     @menus = Menu.all 
    end 

    def result 
     @results = params[menu][postnumer_id] 
    end 

end 

查看:

<th>Póstnúmer:</th></br> 
<%= collection_select(:menu, :postnumer, @menus, :postnumer_id, :postnumer, options =   {:prompt => "Veldu póstnúmer", :include_blank => "Ekkert valið"}, html_options = {:class =>"menus", :multiple => true, :style => 'width:15%'}) %></br> 
<%= button_to "Hefja leit", {:controller => :menus, :action => :result}, {:method => :post} %> 

又過了一天,我從米沙讀的建議,他指着我對符號的優秀文章。 這讓我想到了使用符號。 我有兩個模式菜單和出租,schema.rb如下:

'的ActiveRecord :: Schema.define(版本:20140403200844)做

create_table "menus", force: true do |t| 
    t.string "postnumer" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "postnumer_id" 
end 

create_table "rents", force: true do |t| 
    t.string "fastanumer" 
    t.string "postnumer" 
    t.string "gotuheiti" 
    t.float "flatarmal" 
    t.float "fermetraverd" 
    t.float "upr_fermetraverd" 
    t.float "verd" 
    t.datetime "dagsetning" 
    t.string "sveitarfelagsnumer" 
    t.integer "byggingarar" 
    t.integer "fjoldiherbergja" 
    t.string "matssvaedi" 
    t.string "ist120" 
    t.float "visitala_start" 
    t.float "visitala_end" 
    t.string "undirmatssvaedi" 
    t.float "fasteignamat" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

末 `
我使用兩個相同的符號菜單和租金。會導致問題嗎?

我已經根據對這篇文章的建議改變了代碼,現在花了一些時間閱讀並關注路徑文件。我仍然沒有得到這個工作。當我提交表單時,結果方法未運行,並且collection_select助手的值未被拾取。我想知道是否有人可以提供一些進一步的建議?的代碼如下:
類MenusController < ApplicationController中

def create 
    @menus = Menu.all 
end 

def result 
    @results = params[:menu][:postnumer_id] 
end 

檢視:
<%=的form_tag menus_path做%>

<%= label_tag 'Póstnúmer:' %>

<%= collection_select(:menu,:postnumer,@menus,:postnumer_id,:postnume r,options = {:prompt =>「Veldupóstnúmer:」},html_options = {:class =>「menus」,:multiple => true,:style =>'width:15%'})%>


<%= submit_tag 「Hefja LEIT」:動作=> 「結果」:你應該

@results = params[menu][postnumer_id] 

:控制器=> 「菜單」 %>

<% end %> 


Pricetorent::Application.routes.draw do 
    resources :menus, :only => [:result] 
    get "menus/create" 
    post "menus/result" 
    resources :menus do 
     put :result, :on => :collection 
    end 
end 
+0

如果您選擇一個條目並提交表單,參數是什麼? –

+0

也許我最初的問題是錯誤的。我不知道如何提交表單?這是我的問題。 – user3334207

+1

您可以分享完整的表單代碼和相應的控制器操作。 –

回答

1

代替用途:

@results = params[:menu][:postnumer_id] 

menupostnumer_id是變量(未定義),而:menu:postnumer_id是符號。您可以閱讀Ruby here中的符號。

+0

感謝您的建議。 我已經試過它作爲一個符號,但得到錯誤的方式。 當我在列表中選擇一個條目,並按下按鈕「Hefja leit」 我得到錯誤:「未定義的方法'[]'爲零:NilClass」 當控制器中的行如下所示時會產生此錯誤: '@results = params [:menu] [:postnumer_id]' – user3334207

+0

@ user3334207這意味着'params'是'nil'。 「collection_select」是否在表單中?它需要是一種形式。然後你提交表單,表單的內容將在控制器的'params'中提供。如果你使用'button_to',你的'collection_select'不會傳遞給控制器​​。 – Mischa

+0

謝謝你Mischa。我可以一起使用form_for和collection_select嗎?你有任何關於Rails中表單助手的好文章的建議。對於新手來說,rails文檔有點混亂。當談到新手時,我非常感謝您的幫助和開放的心態。 – user3334207