【问题标题】:Calling method in rails在rails中调用方法
【发布时间】:2020-12-07 11:31:47
【问题描述】:

在我的应用程序中,我有一个创建新公司的表格。在这里我必须输入公司名称和公司网址。这是我的发件人代码。

<%= form_tag(controller: "/company", action: "add_startup_to_index", method: "post") do %>      
<div class="modal-body">
    <div class="form-group">
        <label class="control-label">Company Name</label>
        <input type="text" class="form-control" id="name" name="name" placeholder="Enter the name of the company..." required />
     </div>
    <div class="form-group">
        <label class="control-label">Company URL</label>
        <input type="text" class="form-control" id="url" name="url" placeholder="e.g. http://www.company.com..." required />
    </div>
</div>
<div class="modal-footer">
    <button type="button" class="btn btn-default btn-conf" data-dismiss="modal">Cancel</button>
    <button type="submit" class="btn btn-primary btn-conf">Add Company</button>  
</div>
<% end %>

这是我保存以上数据的方法。

def add_startup_to_index
@url = api_version_root + 'startups/new'
response = RestClient.post @url,
  { startup: {  friendly_name: params[:name],
                url: params[:url] 
            }
  }, api_token_hash

record = JSON.parse(response.body)
   flash[:info] = 'Startup has been added and Crunchbase sync started.'
   redirect_to('/startups/' + record['company_id']) && return
rescue RestClient::ExceptionWithResponse => err
handle_rest_error http_code: err.http_code
end

这很好,我可以拯救公司。现在我想验证 URL。为此,我有以下方法。

def valid_url?(url)
  return false if url.include?("<script")
  url_regexp = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
  url =~ url_regexp ? true : false
end

由于我是 Rails 新手,我不知道如何在我的表单中调用该方法。我试过嵌套的form_tag。但现在是允许的。

我尝试如下。

<%= form_tag(controller: "/company", action: "add_startup_to_index", method: "post") do %>      
<div class="modal-body">
    <div class="form-group">
        <label class="control-label">Company Name</label>
        <input type="text" class="form-control" id="name" name="name" placeholder="Enter the name of the company..." required />
     </div>

    <%= form_tag(controller: "/company", action: "valid_url", method: "post") do %>      
        <div class="form-group">
            <label class="control-label">Company URL</label>
            <input type="text" class="form-control" id="url" name="url" placeholder="e.g. http://www.company.com..." required />
        </div>
    <% end %>
</div>
<div class="modal-footer">
    <button type="button" class="btn btn-default btn-conf" data-dismiss="modal">Cancel</button>
    <button type="submit" class="btn btn-primary btn-conf">Add Company</button>  
</div>
<% end %>

谁能帮帮我。

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    Lanka,如果我理解正确,您正在寻找的是客户端表单验证。在 HTML5 之前,这是一项涉及 JS 的乏味任务。使用 HTML5,url 验证是直接的。只需尝试将输入的类型更改为 url,即更改

    <input type="text" id="url" name="url" ...>
    

    <input type="url" id="url" name="url" ...>
    

    然后,当输入一个不符合要求的 url 字符串时,浏览器将不会提交表单并自动指出问题。这甚至可以使用默认 url 模式开箱即用。有关自定义模式、占位符等的更多信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/url

    【讨论】:

    • 另外值得注意的是,OP 的 URL 正则表达式(毫无疑问是从互联网的某个角落复制的)是不可靠的。例如,.london 域名在 TLD 中包含 六个 字符,因此与正则表达式不匹配:....\.[a-z]{2,5}
    • @Tom 绝对正确,这就是为什么我尽可能喜欢内置的行业标准解决方案而不是 DIY。跟上每一个标准变化是不可能的。
    • @AndreasGebhard 但它也允许无效的 URL。
    • @Lanka 您的无效网址示例是什么? (你的正则表达式是否正确地选择了它?)
    • @Lanka 没问题,如果你有一个更适合你需求的 url 正则表达式,你可以使用它。只需将其分配给输入声明的模式关键字:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/url#pattern。这将覆盖内置模式。无论如何,这应该可以解决您的 OP 提出的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多