如何使用rails 3.2.12中的自定义表单构建器有选择地显示新/编辑视图中的字段?

时间:2013-03-30 04:26:39

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

在我们的rails 3.2.12 app中,我们希望根据访问规则有选择地在new/edit个视图中显示字段(使用simple_form)。例如,对于销售,只能显示客户的namephone#。由于我们不知道访问规则是什么,我们需要在运行时动态构造视图。实现此目的的一种方法是在视图中使用if,这会使视图变得混乱。我们认为custom表单构建可能有所帮助。在网上阅读了一些关于自定义表单构建器的帖子之后,我们仍然没有太多线索。有人可以提供有关如何使用custom表单构建器实现此功能的详细信息吗?谢谢你的帮助!

更新: 由于我们不知道访问规则是什么,因此我们需要在运行时dynamically构建view

2 个答案:

答案 0 :(得分:2)

通常,自定义表单构建器用于更改表单HTML的结构,而不是用于控制字段访问。

“清理”意见的几点建议:

  1. 使用SimpleForm可让您将表单字段/标签作为一个整体处理,从而可以更轻松地仅使用= form_builder.input :credit_card_number if current_user.admin?等字段排除字段。
  2. 对于更广泛的应用程序范围的解决方案,CanCan可以帮助您管理授权和角色。

  3. 编辑:

    根据您的评论,如果所有列都被视为相同且您不需要更改其顺序(使用HAML,但您可以将其更改为ERB,则听起来如下对您来说可能是一个好方法)必要的话):

    = simple_form_for @model do |f|
       = f.error_notification
       - @model.columns_available_for(current_user).each do |column|
          = f.input column
    

答案 1 :(得分:1)

你可以使用rails helpers来做到这一点。

对于前。

module SalesHelper  
 def show_fields  
  if current_user.admin?  
    render 'some_partial' #having name and phone field  
  else  
     render 'other_partial'  
  end  
 end  

结束

在您的视图中添加相应的部分和新的或编辑只需调用
    <%= show_fields%>