【问题标题】:Rails option tags in text_field_tag confusingtext_field_tag 中的 Rails 选项标签令人困惑
【发布时间】:2015-10-24 10:47:15
【问题描述】:

我在 github 存储库中找到了这段代码,位于 https://github.com/heroku/hstore_example 。非常感谢 Richard Schneeman,这是我在 Railspeak 中找到的唯一一个显示语法的示例,用于使用 html.erb 接受用户对 hstore 数据的输入。其他人只是展示了如何在控制台中使用它(我认为我的用户不会很快启动命令行窗口)。

我有两个问题:1、为什么“key”这个词在第5行重复了两次? 2,在底部,在锚标记之后,它说 herf="#"。假设这是一个错字是否安全,他的意思是“href”?该链接没有指向任何地方,并且该类是此处列出的代码下方的脚本使用的 JS 选择器。是否故意拼错,以防止采取行动?

 <%= f.fields_for :data, @product.data do |d| %>
    <% @product.data.try(:each) do |key, value| %>
        <div class="row">
          <p class='span3'>
            <%= text_field_tag key, key, :class => 'text_field dynamicAttributeName' %>
      </p>
       <p class='span3'>
        <%= d.text_field key, :class => 'text_field', :value => value %>
      </p>
      <p class='span1'>
        <a herf='#' class='btn removeRow'>X</a>
      </p>
    </div>
<% end %>
<%- end -%>

同样在这个应用程序(同一个 repo)中,我们找到了这个代码:

<%= form_tag hstore_queries_path, :method => :get, :remote => true, :id => 'hstore_query' do %>

<p>Find:</p>
<%= select_tag 'query_type', "<option value='key_eql'>key equal to ?  </option>
                            <option value='key_value_eql'>key equal to value</option>
                            <option value='key_not_value'>key not equal to value</option>
                            <option value='key_like_value'>key like value</option>".html_safe %>

<%= text_field_tag   :key   , nil, :placeholder => 'Key' %>
<%= text_field_tag   :value , nil, :placeholder => 'Value', :class => 'hide' %>

<br />
<%= submit_tag "Run Query", :class => 'btn btn-primary' %>

<%- end -%>

它来自用于为数据库创建搜索工具的部分。在选择框代码下方,还有另一个 text_field 标记——这一次单词 :key 表示为一个符号。我可以看到在上面的代码块中,关键是一个迭代器变量(虽然我不知道它为什么会出现两次,我也不知道它们中的哪个指的是迭代器)。在较低的部分中,我没有看到对模型“产品”或数据库字段“数据”的任何引用。 " 它是 db 表中唯一的 hstore,但它至少不需要在某个地方引用吗? :Key 本身不是字段,:value 也不是——对不起,我是新手,但如何Rails 知道引用的是哪个 db 字段吗?它不在 partial 中,也没有通过触发它的 render 命令传递。

【问题讨论】:

    标签: javascript ruby-on-rails postgresql hstore


    【解决方案1】:

    1、为什么第5行“key”这个词重复了两次?

    这就是将变量key 的值传递给text_field_tag 的前两个参数。这些是namevalue 参数。 key 变量在第 2 行定义。

    http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-text_field_tag

    2,在底部,在锚标记之后,它说 herf="#"。可以假设这是一个错字,他的意思是“href”吗?

    是的,这只是一个错字。

    【讨论】:

    • 酷,谢谢!所以现在我仍然有点困惑,因为我们依次有一个name 和一个value 参数,CSS 类在--然后在下一个字段中(存储键/值对的:value , 顺序不同,CSS 类在 :value 赋值之前出现。Ruby 语法真的这么松散吗?我不确定解释器如何解析看起来像是表达的东西一个随机的顺序。我也不明白为什么第 5 行中的 name 变量不表示为 :key,因为这与它下面的行更一致
    • 好的。第 5 行使用 text_field_tag,其中第 8 行使用第 1 行的迭代器(d.text_field ),所以我认为这 2 行的语法不同。表单本身也以 new.html.erb 开头(我没有看到它这样做之前),它从那里渲染 _form 部分 - 这是 f.fields_for 获取它的迭代器的地方。诡异的。我看不出这样做的理由,但也许有。我也不知道为什么在这种情况下需要text_field_tag。这段代码对我来说看起来很奇怪。
    • 进一步——key 变量可以在第 2 行定义,但在使用输入字段输入之前不会分配值——在此之前没有任何值可以传递发生。那么为什么它不表达:key =&gt; key,它在第8行表达的方式?
    • 很多代码是基于能够动态添加键和值(基于折叠下方的 JS 代码)。我只是想以一种形式将键和值添加到 hstore。我从其他几个来源拼凑出这个问题的答案,但 Richard 的解决方案仍然提供了更强大的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2022-01-17
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多