1

Цель состоит в том, чтобы захватить входной сигнал из формы, а затем после того, как контроллер и служба будут выполнены, покажет результат на другом представлении. Основная проблема - взаимодействие между контроллером и видом формы. Представление должно передать захваченный вход в качестве параметра в контроллер и продолжить его веселый путь. Как правильно зафиксировать параметр и передать его на контроллер?Передача параметра с точки зрения контроллера. Затем вернитесь к виду

# 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 

Я использую форму helper form_tag на мой взгляд. После того, как пользователь отправит номер, страница будет перенаправлена ​​на страницу отображения вывода.

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

<%= form_tag('show_check_number', method: 'get') do %> 
    <%= text_field_tag(:cert) %> 
    <%= submit_tag("Submit") %> 
<% end %> 

Эта страница просто показывает результат вычислений, выполненных с помощью службы «приложение/услуги/number_check_modulo»

# View that shows the result 
<h1>Your check number is <%= @check_number %></h1> 

Я довольно новыми для этого, но я думаю, что я по праву трек.

+3

Может быть, я что-то отсутствует, но я не вижу, что вы делаете что-то вроде 'Params [: cert] ', чтобы получить значение': cert'; это то, что вам не хватает? –

+1

Имя и название названия классов довольно запутывают. В любом случае, это должно быть так: 'check_policy_number = Get_policy_check_digit.new (params [: cert])'. Метод 'get_cert_number (cert)' бесполезен здесь – MrYoshiji

ответ

1

Я предлагаю вам этот рефакторинг:

# 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 
+0

Я попытался реорганизовать то, как вы показали, но я получаю сообщение об ошибке. "NameError в CheckNumberController # show_check_number" "неинициализированная константа CheckNumberController :: PolicyCheckDigit". Я не понимаю, почему это должно произойти. Я написание правильное, так как я только что сделал копию в PolicyCheckDigit. – Nick

+0

Вам необходимо перезагрузить сервер и в конечном итоге включить требование в классный блок контроллера (требуется, чтобы файлы загружались, а не когда файл читается системой) – MrYoshiji

2

попытаться изменить метод show_check_number этой

def show_check_number 
    checking_policy_number = Get_policy_check_digit.new(params[:cert]) 
    @check_number = checking_policy_number.create_check_digit  
end 
Смежные вопросы