【问题标题】:Custom form_for to validation record自定义 form_for 到验证记录
【发布时间】:2020-03-24 08:04:23
【问题描述】:

我正在尝试创建一个自定义form_for,在其中检查记录是否存在于表中。我做了很多研究,但没有提出任何有用的东西。

我目前的方法是创建一个简单的搜索表单并显示所有相似的记录。然而,这不是我要找的。理想的情况是:

  1. form_for获取记录名称
  2. 检查此记录是否存在
  3. 如果存在 - 重定向到一页。如果没有 - 重定向到另一个页面

我的控制器:

def validate_name
  @room = Room.new
  name = params[:name]

  if name != nil
    puts "Redirect to page A"
  else
    puts "Redirect to page B"
  end
end

这里的问题是,每当用户访问该页面时,它都会自动触发上面的代码。我的目标是创建一个表单验证,尝试找到准确的记录,然后根据if else 条件进行重定向。

当前form_for

= form_for(Room.new, url: name_room_path, method: :get, action: :validate_name) do |f|
  = f.text_field :name
  = f.submit

我确定我的表格也不正确,因为我迷路了。我找到了创建自定义表单的方法,但不知道如何根据用户的输入触发数据库检查。

PS:这些不是newupdate 操作。

感谢您的帮助和时间。

【问题讨论】:

    标签: ruby-on-rails form-for


    【解决方案1】:

    试试这个:

    class RoomsController < ActionController::Base
      def validate_name
        if params[:name] && Room.where(name: params[:name]).last.present?
          puts "Redirect to page A"
        elsif params[:name] && Room.where(name: params[:name]).last.nil?
          puts "Redirect to page B"
        end
      end
    end
    

    在 routes.rb 中:

    get '/rooms/validate_name', to: 'rooms#validate_name'
    

    在视图中:

    <%= form_tag(rooms_validate_name_path, :method => :get  )do %>
      <%= text_field_tag :name %>
      <%= submit_tag %>
    <% end %>
    

    【讨论】:

    • 可以使用find_by(name: ...)。不需要使用 .last 或 present 检查。如果找不到,它将返回 nil。
    猜你喜欢
    • 2021-08-11
    • 2019-06-24
    • 1970-01-01
    • 2019-07-08
    • 2016-09-23
    • 1970-01-01
    • 2023-02-01
    • 2013-11-03
    • 2022-01-11
    相关资源
    最近更新 更多