2016-02-12 2 views
0

Я пытаюсь создать очень простое приложение, которое определяет, являются ли два слова анаграммами, но у меня много проблем с этим на RoR. Я сейчас застрял в ошибке «Отсутствующий шаблон». У меня есть следующий вид, который находится всего два текстовых поля для слов и две метки и кнопку отправить:Ошибка «Отсутствует шаблон» после отправки формы

<%= form_for :solver, url: solver_solve_path do |f| %> 
    <p> 
    <%= f.label "First word or sentence" %><br> 
    <%= f.text_field :first %><br> 
</p> 
<p> 
    <%= f.label "Second word or sentence" %><br> 
    <%= f.text_field :second %><br> 
</p> 
<p> 
    <%= f.submit %> 
</p> 
<%end%> 

И в routes.rb файле у меня есть:

Rails.application.routes.draw do 
    get 'welcome/index' 

    post 'solver/solve' 

    root 'welcome#index' 

В SolverController выглядит как это:

class SolverController < ApplicationController 
    def create 
     render plain: params[:solver].inspect 
    end 

    def solve 
     wordone = params[:solver][:first] 
     wordtwo = params[:solver][:second] 
     wordone.chars.sort { |a, b| a.casecmp(b) } .join 
     puts wordone 
     wordtwo.chars.sort { |a, b| a.casecmp(b) } .join 
     puts wordtwo 
    end 
end 

Однако, когда я заполнить форму и нажмите представить, я получаю ошибку недостающий шаблон:

Missing template solver/solve, application/solve with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/mariana/Documents/RD-anagram/anagram/app/views" 

Может ли кто-нибудь объяснить мне, что происходит, и что я могу сделать, чтобы исправить это?

+0

, пожалуйста, напишите полный путь к файлу с формой. – Ilya

+0

'~/Documents/RD-anagram/anagram/app/views/welcome/index.html.erb' это полный путь к файлу, это то, что вы хотели? – Tuma

+0

, где, по вашему мнению, идет вывод и из какого контекста - метод create, называемый – christoandrew

ответ

1

Как это метод post, действие контроллера должно быть перенаправлено на другое действие условно. В противном случае он будет искать вид в app/views/solver/solve.html.erb. Если у вас есть такая точка зрения, она будет отображать ее, иначе она будет кричать на вас за то, что вы не сказали ей, что делать.

+0

Итак, я предполагаю, что допустил ошибку, определив этот метод как сообщение? Я хочу, чтобы он возвращал логическую или, возможно, строку, поэтому я могу отобразить страницу, отображающую эту информацию. Должен ли он быть методом получения? – Tuma

+0

Действия контроллера не «возвращают» значения традиционно. Как правило, для запроса html запрос GET будет выполнять некоторую логику в действии контроллера, а затем отображать представление; запрос POST или PUT выполняет какое-либо действие, записывает в базу данных, а затем перенаправляет на действие GET, которое будет отображать представление. Вы можете визуализировать представление из post action, это просто не принято. –

+0

Если вам нужен метод, возвращающий значение, он должен быть написан на модели или модуле, а не на контроллере. –

1

Вы должны создать файл /app/views/solver/solve.html.erb и написать в этом файле свою форму.

+0

Это работает! Не могли бы вы объяснить, что это делает? – Tuma

+0

http://guides.rubyonrails.org/action_view_overview.html - пожалуйста, прочитайте эту статью :) – Ilya

Смежные вопросы