Rails 3 - 优化索引和显示视图中的form_for

时间:2011-01-09 16:11:59

标签: ruby-on-rails ruby-on-rails-3

我刚开始学习Rails,我正在尝试构建一个帖子/类似的功能。我已经开始工作,但必须有一种更有效的方法。

我的帖子索引视图包含以下代码(我使用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 个答案:

答案 0 :(得分:2)

编辑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 :(得分:1)

隐藏字段适用于noobs man,把那个烂摊子放在控制器中: - )

在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 %>

当然有些可能无法正常工作,但这是我能收集到的要点。