2016-03-19 3 views
0

Я только что начал новое приложение, где я хочу взять почтовый индекс в форме и сохранить его в базе данных. Моя проблема заключается в том, что действие сотворения, похоже, не называется независимо от того, что я пытаюсь сделать.Создать действие, которое не вызывается в форме

Маршруты:

root 'postcodes#new' 
resources :postcodes, only: [:new ,:create] 

Контроллер: postcodes_controller.rb

class PostcodesController < ApplicationController 
    def new 
    @postcode = Postcode.new 
    end 

    def create 
    @postcode = Postcode.new(postcode_params) 
    if @postcode.save 
     flash[:success] = 'Success' 
    else 
     flash[:error] = 'Error' 
    end 
    end 

    private 

    def postcode_params 
    params.require(:postcode).permit(:code) 
    end 
end 

Модель: postcode.rb

class Postcode < ApplicationRecord 
    validates :code, presence: true, uniqueness: true 
end 

Вид: почтовые индексы/new.haml

.container 
    %form 
    %fieldset.form-group 
     = form_for @postcode do |f| 
      = f.label :postcode 
      = f.text_field :code, placeholder: 'Example Postcode', class: 'form-control' 
     = f.submit 'Submit', class: 'btn btn-primary' 

Я попытался передать больше опций в form_for, таких как метод и действие, и теперь у меня такое чувство, что это ошибка маршрутизации.

Любая помощь будет оценена по достоинству.

Спасибо.

+0

* Действие создания, кажется, не называется * Как вы говорите? Вы проверили в своей базе данных, что запись не создается? Вы получили сообщение об ошибке? У вашего метода 'create' есть представление, потому что вы не определили перенаправление в конце метода. – spickermann

+0

Извините, мне следовало быть яснее. Ничто не добавляется в базу данных при отправке формы, и если я помещаю '' raise'' в начало действия create, ничего не происходит. –

+0

Что говорит серверный журнал? Любая ошибка? – Pavan

ответ

1

Я считаю, что проблема, с которой вы столкнулись, является результатом вашей HAML.

Вам не нужно использовать или не использовать элемент HTML формы вне вызова метода form_for.

Метод form_for будет обрабатывать создание этого элемента HTML/тега для вас.

У вас есть:

.container 
    %form 
    %fieldset.form-group 
     = form_for @postcode do |f| 
      = f.label :postcode 
      = f.text_field :code, placeholder: 'Example Postcode', class: 'form-control' 
     = f.submit 'Submit', class: 'btn ban-primary' 

который выводит пустой <form> элемент.

Вы должны иметь:

.container   
    = form_for @postcode do |f| 
    %fieldset.form-group 
    = f.label :postcode 
    = f.text_field :code, placeholder: 'Example Postcode', class: 'form-control' 
    = f.submit 'Submit', class: 'btn ban-primary' 

Это должно генерировать правильный <form> тег с требуемыми action и method атрибутов заселенных с правом URL и «пост», так что называется ваш create действие.

+0

Большое спасибо. Забавно, что я знал, что мне это не нужно, но не понимал, что это может вызвать такую ​​проблему. –

+0

То же самое здесь ... было немного удивлено, увидев это как преступника. –

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