首先,请提前感谢您的关注:我在Rails中非常棒,我遇到的问题似乎并不困难,但我遇到了一些麻烦。
以下是我的问题:我正在使用以下部分显示“建议”列表:
<table class="recommendations" summary="User recommendations">
<%= render @recommendations%>
</table>
它为每个已发布的“建议”调用下一个部分:
<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”方法来更新数据库中的资源。
你能帮我吗?
答案 0 :(得分:1)
好的,现在我已经完成了。
Rails可以管理check_box上的已检查操作,但不管理未选中的操作。这解释了之前的行为。
我改变了方法,我使用了link_to和image_tag。这是代码:
<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"
现在工作正常。