2010-12-08 15 views
3

私はチェックされた値を返す方法がわかりません。Rails、checkbox

@cities = Database.find(:all) 
params[:cities].each do |city| 
    ... 
end 

<% for city in @cities %> 
<%= check_box_tag "cities[]", city.id %> <%= city.city1 %> 
<% end %> 

をが、エラーが発生しました:私のコードは

controller: 

    def index 

    // there I would like to get checked cities 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @cities } 
    end 

    end 


viewer: 

    <%= render 'form' %> 


_form: 

    <% for cities in Database.find(:all) %> 
    <div> 
    <%= check_box_tag cities.city1 %> 
    <%= cities.city1 %> 
    </div> 
    <% end %> 

ありEDIT

は、私が試した

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.each 

答えて

5

こんにちはあなたの問題は、チェックボックスを通じてHABTMに似ているようだあなたは都市のリストを反復処理するとcheck_box_tagを追加することをお勧めしますこれを行うには

<%form_tag "some_action", :method => :post do %> 
    <% Database.find(:all).each do |city| %> 
    <div> 
     <%= check_box_tag "cities[]",city.city1, :false %> 
     <%= citiy.city1 %> 
    </div> 
    <% end %> 
<%end%> 

と内部コントローラ

def some_action 
    if !request.post? 
    @cities = Database.find(:all) 
    render 'view' 
    else 
    params[:cities].each do |city| 
     ... 
    end 
    redirect_to view_path 
    end 
end 
+2

もう1つのことは、ビューからdbにリクエストを行うことです。コントローラー内で行う必要があります。 – Bohdan

+0

コントローラーからdbへの要求を試みましたが、エラーが発生しました。私はparams [:cities]と何か間違っていると思う。 .. これがなければボックスをチェックすることができます。 – Martynas

+0

POSTとGETリクエストの違いはありません。パラメータ:[cties]を使用可能にするには、フォームからデータを送信する必要があります。 – Bohdan

2

を試してみてくださいそれぞれのために "cities []"という名前で。

私は通常、ビューで使用する変数としてリストを提供します。コントローラーでDatabase.findを実行します。

<% for city in @cities %> 
    <%= check_box_tag "cities[]", city.id %> <%= city.name %> 
<% end %> 

注 - 何のチェックボックスがチェックされていない場合は、何もPARAMのために提出されません - すなわち、すべての「都市[]」のparamは存在しません。検索のロジックに応じてこれを追加する必要があります。その場合は、フォームに追加してください。

<%= hidden-field_tag "cities[]", '' %> 

またはコントローラで処理できます。

+0

しかし、エラーが発生しました。 EDIT – Martynas

+0

params [:cities] .each do | city |との間違ったことを参照してください。 ... end これがなければ私はボックスをチェックすることができますが(チェックするだけで、パラメータは取得しません) – Martynas

+0

エラーは@cities変数がnilであるためです。コントローラーアクションで@citiesを作成します。 – Swards

1

コントローラコードにデバッガを置きます。あなたがあなたのパラメを調べるとどうなりますか? params [:cities]に類似したものはありますか?もしそうなら、そこには何がありますか?