Я застрял на этом в течение нескольких дней, и я боюсь, что мне не хватает словарного запаса, чтобы правильно задать этот вопрос, но любая обратная связь очень ценится!
Я работаю над основным сайтом блога. Пользователи могут создавать сообщения с заголовком, описанием и объявлять, могут ли другие просматривать сообщение (публичное или частное). На главной странице я хочу, чтобы пользователь мог видеть список своих сообщений, переключать публичные | личные и удалять сообщения. Перечисление легко (я отрисовываю частичное на основе сообщений пользователя), и ссылка удаления AJAX работает хорошо:
<%= link_to 'Delete Post', post, :confirm => 'Are you sure?', :method => :delete, :remote => true %>
Переключение public | private соответствует действию редактирования / обновления, и я не могу понять, как это сделать, используя ссылку или кнопку - кажется, мне нужно использовать форму. Я перепробовал множество вариантов рабочей кнопки удаления, которые выглядят примерно так (и ни одна из них не работает):
<%= link_to 'Make Public', { :controller => "posts", :action => "update", :id => post, :public => true, :post => post }, :method => :put, :remote => true %>
Единственный способ работы с формой, но для этого необходимо, чтобы пользователь нажал кнопку Update Post
:
<%= form_for(post, :remote => true) do |f| %>
<div class="field">
<%= f.label :public %><br />
<%= f.check_box :public %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Итак, в Rail3, как правильно обновлять отдельный атрибут? (Есть ли более подходящие слова?) Это можно сделать с помощью ссылки или кнопки? Должен ли я использовать форму? Есть ли способ Rails3 (например, destroy.js.erb) добавить событие onclick / onchange или мне нужно разработать собственный JavaScript?
Ответ Заббы велик; однако в конечном итоге я использовал скрытую форму, отправленную через JavaScript (в частности, jQuery).
В виде:
<div>
<%= form_for(post, :remote => true) do |f| %>
<%= f.hidden_field :public, { :value => !post.public } %>
<% end %>
<% if post.public == true %>
<div class="pp">Public</div>
<% else %>
<div class="pp">Private</div>
<% end %>
</div>
JavaScript:
$('.pp').live('click', function(){
$(this).siblings('form').submit();
});
Комментарии к двум подходам? Еще один идиоматик?