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

jmi*_*els 1 ruby forms ruby-on-rails code-duplication ruby-on-rails-4

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

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

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

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

我认为这种方法不起作用,因为<%end%>正在结束表单.

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

谢谢!

D.F*_*Fux 6

尝试将代码移动到您的帮助器可能会有所帮助:

#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
Run Code Online (Sandbox Code Playgroud)

并使用:

<%= form_for_admin current_user.admin? do |f| %>
Run Code Online (Sandbox Code Playgroud)