Rails 3 - Оптимизируйте form_for в индексе и покажите представления - PullRequest
1 голос
/ 09 января 2011

Я только начал изучать Rails и пытаюсь создать функцию типа post / like. У меня это работает, но должен быть более эффективный способ сделать это.

Мой почтовый индекс содержит следующий код (я использую jQuery для отправки формы через ajax):

<% @posts.each do |post| %>   
  <%= form_for([post, post.likes.build]) do |f| %>
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <%= f.hidden_field :post_id, :value => post.id %>
  <%= f.submit pluralize(post.likes.count, 'Like'), :class => 'like like-' + post.id.to_s %>
  <% end %>
<% end %>

Мое представление содержит следующее:

<%= render "likes/form" %>

Который содержит следующее:

<%= form_for([@post, @post.likes.build]) do |f| %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :post_id, :value => @post.id %>
<%= f.submit pluralize(@post.likes.count, 'Like'), :class => 'like like-' + @post.id.to_s %>
<% end %>

Это все работает в сочетании с jQuery и уничтожает ссылки. Однако наличие двух разных форм кажется немного тяжелым. Любые идеи о том, как изменить / оптимизировать или лучший способ сделать это?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 09 января 2011

Редактировать form.html.erb частичную форму

<%= form_for([post, post.likes.build]) do |f| %>
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <%= f.hidden_field :post_id, :value => post.id %>
  <%= f.submit pluralize(post.likes.count, 'Like'), :class => 'like like-' + post.id.to_s %>
<% end %>

<%= render "likes/form", :locals => {:post => @post} %>

<% @posts.each do |post| %>
  <%= render "likes/form", :locals => {:post => post} %>
1 голос
/ 09 января 2011

скрытые поля для новичков, поместите этот беспорядок в контроллер: -)

В вашем контроллере Post сделайте что-то вроде


def show
  @post = Post.find(params[:id])
  @like = @post.likes.build
end
def create
  @like = @post.likes.build(params[:id])
  @like.user_id = current_user.id
  # ... the rest of the stuff here
  #assuming you have scaffolded it will be here. you can find that
end

теперь, на ваш взгляд, вы можете сделать что-то вроде: < % = form_for([post, @like]) do |f| %> < % = render_partial 'likes', :locals => {:f => f} %> < % end %>

в новом _likes.html.erb: < % = f.submit pluralize(post.likes.count, 'Like') , :c lass = > 'like like-' + post.id.to_s %>

конечно, некоторые могут не работать точно, но это суть того, что я могу собрать.

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