2010-12-07 7 views
1

まずは事前に感謝の意を表します:私はRailsのかなりのnoobですが、難しくはないような問題に直面していますが、実装にはいくつか問題があります。ここでクリックすると、属性をチェックボックスにバインドして更新する方法はありますか?

は私の質問です:私は、次の部分を使用して「勧告」のリストを表示しています:

<table class="recommendations" summary="User recommendations"> 
    <%= render @recommendations%> 
</table> 

それはdispayed「勧告」のそれぞれについて、次の部分を呼び出します。

<tr> 
    <td class="recommendations"> 
<span class="content"> 
      <%= wrap(recommendation.content)%> 
     </span> 
<span class="timestamp"> 
      Posted <%=time_ago_in_words(recommendation.created_at)%> ago. 
</span> 
    </td> 
    <td> 
<%= form_for current_user.recommendations.find(:id => recommendation.id) do |f| %> 
    <label>Display</label><%= f.check_box :displayed, :onclick => "update"%> 
<% end %> 
    </td> 
</tr> 

したがって、チェックボックスにrecommendation.displayed属性をバインドし、チェックボックスをオンにしたときに推奨リソースを自動的に更新したいと思います。

今のところ、私は次のようなエラーがあるためのform_forに渡すために適切な「勧告」のインスタンスにアクセスすることはできません。

Unknown key(s): id 

をそして、私はわからない

:onclick => "update" 
こと

は私がやりたいことを実行します:残りの "PUT"メソッドを呼び出して、データベースのリソースを更新します。

私を助けてもらえますか?

答えて

1

これでOKです。

Railsではcheck_boxではチェックされたアクションを管理できますが、チェックされていないアクションは管理できません。これは以前の動作を説明しています。

私はそれを行う方法を変更し、私はimage_tagでlink_toを使用しました。ここでは、コードは次のようになります。

<td> 
    <label>Display</label> 
<% if (recommendation.displayed?) %> 
<%= link_to image_tag("checked.png", :border=>0), :action => :hide, :id => recommendation %> 
<% else %> 
<%= link_to image_tag("unchecked.png", :border=>0), :action => :display, :id => recommendation %> 
<%end%> 
</td> 

とコントローラで:

def display 
    @recommendation.displayed = true 
    unless @recommendation.save 
    flash[:error] = "Error displaying the recommendation." 
    end 
    redirect_back_or current_user 
end 

def hide 
    @recommendation.displayed = false 
    unless @recommendation.save 
    flash[:error] = "Error hiding the recommendation." 
    end 
    redirect_back_or current_user 
end 

そして特定のルート:

get 'recommendations/display/:id', :to => "recommendations#display" 
get 'recommendations/hide/:id', :to => "recommendations#hide" 

今では正常に動作します。

関連する問題