Rails - 同一表单的不同form_for语句

时间:2014-05-05 16:27:06

标签: ruby-on-rails ruby forms ruby-on-rails-4 code-duplication

我正在尝试避免同一资源的管理表单和常规用户表单之间的代码重复。

我希望能够通过以下方式使用一种形式:

<% if current_user.admin? %>
  <%= form_for([:admin,@post], :html => {class: "form"}) do |f| %>
<% else %>
  <%= form_for @post, html: { class: 'form' } do |f| %>
<% end %>

然后包含只有管理员应该通过表单正文中的语句看到的字段。

这种方法不起作用,我认为因为&lt;%end%&gt;正在结束表格。

有办法做到这一点吗?这种方法是否有意义?

谢谢!

1 个答案:

答案 0 :(得分:5)

尝试将代码移动到帮助程序可能有所帮助:

#YourHelper.rb
def form_for_admin(condition, &block)
    if condition
        form_for [:admin, @post], :html => {class: "form"}, &block
    else
        form_for @post, html: { class: 'form' }, &block
    end
end

并使用:

<%= form_for_admin current_user.admin? do |f| %>