【问题标题】:Rails - Different form_for statements for the same formRails - 相同表单的不同 form_for 语句
【发布时间】:2014-05-05 16:27:06
【问题描述】:

我试图避免同一资源的管理员表单和普通用户表单之间的代码重复。

我希望能够对两者都使用一种形式,方法是:

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

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

这种方法不起作用,我认为是因为 正在结束表单。

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

谢谢!

【问题讨论】:

  • 我认为它不会起作用

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


【解决方案1】:

尝试将代码移至您的助手可能会有所帮助:

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

【讨论】:

  • 这个解决方案效果很好。然而,我最终意识到,虽然我想避免重复,但我不希望管理员在应用程序前端看到与用户不同的表单。我最终只是将重复的部分抽象为部分并传入局部 f 变量,例如:
猜你喜欢
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
相关资源
最近更新 更多