Как обновить атрибут, связанный с флажком при нажатии на него? - PullRequest
1 голос
/ 07 декабря 2010

Прежде всего, спасибо заранее за ваше внимание: я довольно нуб в 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>

Итак, я быхотел бы связать атрибут practice.displayed с флажком и автоматически обновлять ресурс рекомендации, когда этот флажок установлен или нет.

На данный момент я не могу получить доступ к соответствующему экземпляру "рекомендации" для передачи в form_forпотому что у меня следующая ошибка:

Unknown key(s): id

И тогда я не уверен, что

:onclick => "update"

выполнит то, что я хочу сделать: вызовите остальной метод "PUT" для обновленияресурс в базе данных.

Не могли бы вы мне помочь?

1 Ответ

1 голос
/ 18 декабря 2010

ОК, теперь я закончил.

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"

Теперь все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...