2014-05-05 20 views
0

我试图避免同一个资源的Admin表单和常规用户表单之间的代码重复。Rails - 同一表单的不同form_for语句

我希望能够使用一种形式两种,通过执行类似:

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

则包括只有管理员应通过,如果在窗体的身体语句中所看到的字段。

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

有没有办法做到这一点?这种方法甚至有意义吗?

谢谢!

+0

我不认为这会工作 – Babar

回答

4

尝试移动代码,以你的助手可能会有帮助:

#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| %> 
+0

该解决方案很好工作。不过,我最终意识到,虽然我想避免重复,但我不希望管理员看到与应用程序前端用户不同的表单。我最终只是将重复的部分抽象成partials,并传入局部f变量,如:<%= render partial:'form_fields',locals:{f:f}%> – jmichaels