Ruby on rails 将参数从视图传递到控制器。然后回到视图

Ruby on rails 将参数从视图传递到控制器。然后回到视图,ruby-on-rails,ruby,forms,ruby-on-rails-4,parameter-passing,Ruby On Rails,Ruby,Forms,Ruby On Rails 4,Parameter Passing,目标是从表单捕获输入,然后在控制器和服务完成后,在另一个视图上显示结果。主要问题是控制器和表单视图之间的交互。视图应该将捕获的输入作为参数传递给控制器,然后继续它的工作。如何正确捕获参数并将其传递给控制器 # controller class CheckNumberController < ApplicationController require_relative '../services/number_check_modulo' def get_cert_number(cert

目标是从表单捕获输入,然后在控制器和服务完成后,在另一个视图上显示结果。主要问题是控制器和表单视图之间的交互。视图应该将捕获的输入作为参数传递给控制器,然后继续它的工作。如何正确捕获参数并将其传递给控制器

# controller
class CheckNumberController < ApplicationController
  require_relative '../services/number_check_modulo'
  def get_cert_number(cert)
    @cert_id = cert
  end

  def show_check_number
    checking_policy_number = Get_policy_check_digit.new(@cert_id) # Creates a new instance of the "Get_policy_check_digit" class
                                                                 # From number_check.rb
    @check_number = checking_policy_number.create_check_digit     # Runs the "create_check_digit" method from the "Get_policy_check_digit" class
  end
end

# service 'app/services/number_check_modulo' required in the controller shown above
class Get_policy_check_digit
  def initialize(cert_id)
    #instance variable
    @cert = cert_id
  end

  def create_check_digit
    cert_id_6 = @cert.to_s
    cert_id_6.slice!(0)
    cert_id_6.to_i
    cert_id_6 % 7
  end
end
#控制器
类CheckNumberController
我当前正在视图中使用form helper form_标记。用户提交数字后,页面将重定向到输出显示页面

# Form view
<H1>Enter Cert Number below</H1>

<%= form_tag('show_check_number', method: 'get') do %>
    <%= text_field_tag(:cert) %>
    <%= submit_tag("Submit") %>
<% end %>
#表单视图
在下面输入证书号码
此页面仅显示服务“app/services/number\u check\u modulo”完成的计算结果

# View that shows the result
<h1>Your check number is <%= @check_number %></h1>
显示结果的视图 你的支票号码是

我对这方面还不太熟悉,但我认为我的思路是正确的。

尝试将方法show\u check\u number更改为此

def show_check_number
  checking_policy_number = Get_policy_check_digit.new(params[:cert]) 
  @check_number = checking_policy_number.create_check_digit    
end

我建议您进行以下重构:

# controller
require 'app/services/number_check_modulo'    
class CheckNumberController < ApplicationController

  def show_check_number
    policy_check_digit = PolicyCheckDigit.new(params[:cert])
    @check_number = policy_check_digit.create_check_digit
  end
end

# app/services/number_check_modulo
class PolicyCheckDigit
  def initialize(cert_id)
    @cert = cert_id
  end

  def create_check_digit
    cert_id_6 = @cert.to_s
    cert_id_6.slice!(0)
    cert_id_6.to_i
    cert_id_6 % 7
  end
end
#控制器
需要“应用程序/服务/编号\u检查\u模数”
类CheckNumberController
也许我遗漏了一些东西,但我看不到你在做类似于
参数[:cert]
的事情来获取
:cert
;这就是您所缺少的吗?您的类命名和方法名称非常混乱。无论如何,它应该是这样的:
checking\u policy\u number=Get\u policy\u check\u digit.new(params[:cert])
。方法
get\u cert\u number(cert)
在这里是无用的,我试图按照您显示的方式重构,但我得到了一个错误。“CheckNumberController中的NameError#show_check_number”“未初始化的常量CheckNumberController::PolicyCheckDigit”。我不明白为什么会这样。I拼写正确,因为我刚刚复制粘贴了PolicyCheckDigit。您必须重新启动服务器,并最终将require放入控制器的类块中(在加载类时需要文件,而不是在系统读取文件时需要文件)