【问题标题】:How do I add autofocus to a form field if it is the edit form?如果它是编辑表单,如何将自动对焦添加到表单字段?
【发布时间】:2014-02-27 19:34:44
【问题描述】:

我是 ruby​​ on rails 的新手,并且正在阅读 Rails 教程这本书以及来自 pragmatic studio 的 Rails Programming。但是对于我的项目,我现在需要找到解决方案,很遗憾我不能花更多时间在研究上。

我的问题是,一旦我能够添加、显示和编辑表单,我就会被指示创建部分表单,即 _forms.html.erb,然后在编辑、显示和新页面上呈现这些表单。

在我的 _forms.html.erb 部分中,我如何根据要呈现表单的页面使用 if 语句来实现一些流程。

例如,当为显示页面呈现 _form.html.erb 时,我希望将某些 form_for 标签/字段设置为只读:true。在表单的底部,我还想根据页面提交、编辑、更改按钮。

到目前为止,我正在尝试使用 parems[:action] == "new" 或 "edit" 等来实现控制流,如下所示:

edit.html.erb文件下的旧代码:

      <%= f.label :patform_type %>
      <%= f.text_field :patform_type,autofocus: true %>

_form.html.erb 文件下的新代码:

      <%= f.label :patform_type %>
      <%= f.text_field :patform_type %>
        <% if params[:action] == "new" %>
          <%= ,autofocus: true %>
        <% end %>

我的原始代码受到这些帖子的影响: Rails not editable text field How to disable all form_for input fields in Ruby on Rails app?

一旦我做对了,我希望我可以用它来包裹其他元素,如提交、编辑按钮等或其他字段。

另外,如果有人知道更好的方法,请告诉我,因为我不知道我不知道什么。

感谢您提供的任何帮助/想法。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    如果您在表单中需要如此深度的逻辑,您可能必须坚持使用一堆 if/else 语句,但我建议您将表单输入到它们各自的 erb 文件中,而不是从部分呈现大量的逻辑。

    partial 用于重复代码,而您的代码并不完全是我所描述的可重复代码。它也不是立即可以理解的,并且将包含基本上浪费时间阅读的代码:

    例如,如果我正在阅读编辑操作的视图并且我看到:

    if params[:action] == "new"
    

    它将测试甚至与当前视图无关的操作,这与以下逻辑不同:

    if current_user.admin?
    

    这将更适合基于部分的逻辑。

    希望有所帮助,享受 RoR

    【讨论】:

    • 这是合理的逻辑,我可以接受。谢谢你的建议。我会坚持将它们保存在自己单独的 erb 文件中,并将部分用于真正可重复的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多