2015-08-29 3 views
1

Моя форма Rails («новое» действие в моем контроллере) не создает объект при нажатии кнопки «Отправить». Я не получаю никаких ошибок на странице или на консоли. Кажется, что он застрял и не выполнил POST для действия «создать» в моем контроллере. Когда я нажимаю кнопку «Отправить» в моей форме, URL-адрес изменяется на meds/new?utf8=✓&authenticity_token=<random characters> и удаляет форму.Rails 4 form, не создающий объект

Я чувствую, что мне не хватает чего-то действительно элементарного (прошло некоторое время с тех пор, как я запрограммировал Rails).

Вот соответствующий код:

new.html.erb

<% if user_signed_in? && current_user.is_admin == true %> 
        <%= simple_form_for(@med) do |f| %> 
          <div class="form-group"> 
           <%= f.label :brand_name, "Name of the medicine:" %> 
           <%= f.text_field :brand_name, required: true %> 
          </div> 
          <div class="form-group"> 
          <%= f.label :generic_name %> 
          <%= f.text_field :generic_name, required: true %> 
          </div> 
          <div class="form-group"> 
           <%= f.label :description %> 
           <%= f.input :description, as: :summernote, :id => 'description' %> 
          </div> 
          <div class="form-group"> 
           <%= f.label :reactions %> 
           <%= f.text_area :reactions, class: 'summernote', id: 'reactions' %> 
          </div> 
          <div class="form-group"> 
          <%= f.label :interactions %> 
           <%= f.text_area :interactions, class: 'summernote', id: 'interactions' %> 
          </div> 
          <div class="form-group"> 
           <%= f.label :implementation %> 
           <%= f.text_area :implementation, class: 'summernote', id: 'implementation' %> 
          </div> 
          <div class="form-group"> 
           <%= f.label :availability %> 
           <%= f.text_area :availability, class: 'summernote', id: 'availability' %> 
          </div> 
          <div class="form-group"> 
           <%= f.label :warnings %> 
           <%= f.text_area :warnings, class: 'summernote', id: 'warnings' %> 
          </div> 
        <%= f.submit "Save changes", class: "btn btn-primary" %> 
        <% end %> 
       <% end %> 

meds_controller.rb

class MedsController < ApplicationController 
    def index 
    end 

    def new 
    @med = Med.new 
    end 

    def create 
    @med = Med.create(med_params) 
    redirect_to root_url 
    end 

    def show 
    @med = Med.find(params[:id]) 
    end 

    def edit 
    @med = Med.find(params[:id]) 
    end 

    def update 
    @med = Med.find(params[:id]) 
     respond_to do |format| 
      if @med.update(med_params) 
       format.html { redirect_to @med, notice: 'Med was successfully updated.' } 
       format.json { head :no_content } 
      else 
       format.html { render action: 'edit' } 
       format.json { render json: @med.errors, status: :unprocessable_entity } 
      end 
     end 
    end 

    private 

    def med_params 
    params.require(:med).permit(:brand_name, :generic_name, :description, :reactions, :interactions, :implementation, 
     :availability, :warnings) 
    end 

end 

meds.rb модель

class Med < ActiveRecord::Base 
end 

routes.rb

Rails.application.routes.draw do 
    devise_for :users 
    resources :meds 
    #get 'meds/index' 

    root to: "meds#index" 
end 

Что я пропустил?

Спасибо!

EDIT: Добавлен вывод в консоли, когда я нажимаю кнопку:

Started GET "/meds/new?utf8=%E2%9C%93&authenticity_token=XG44W3%2Bj5A3piAJnp0uQUF8L5gruoGDgdiaqZgCSf3bY219l%2BGIRc4Z%2FaypXa%2FacacQGTCFQmFMckS30Jf6ZLg%3D%3D&med%5Bbrand_name%5D=sfsdf&med%5Bgeneric_name%5D=sdfsdf&med%5Bdescription%5D=sdfsdf&med%5Breactions%5D=&med%5Binteractions%5D=&med%5Bimplementation%5D=&med%5Bavailability%5D=&med%5Bwarnings%5D=&commit=Save+changes" for ::1 at 2015-08-28 22:24:00 -0400 
Processing by MedsController#new as HTML 

EDIT 2: Я не думаю, что создание вызывается. Вот мои грабли маршруты:

    Prefix Verb URI Pattern     Controller#Action 
     new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
      user_password POST /users/password(.:format)  devise/passwords#create 
     new_user_password GET /users/password/new(.:format) devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PATCH /users/password(.:format)  devise/passwords#update 
         PUT /users/password(.:format)  devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)  devise/registrations#cancel 
     user_registration POST /users(.:format)    devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)  devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)   devise/registrations#edit 
         PATCH /users(.:format)    devise/registrations#update 
         PUT /users(.:format)    devise/registrations#update 
         DELETE /users(.:format)    devise/registrations#destroy 
        meds GET /meds(.:format)    meds#index 
         POST /meds(.:format)    meds#create 
       new_med GET /meds/new(.:format)   meds#new 
       edit_med GET /meds/:id/edit(.:format)  meds#edit 
        med GET /meds/:id(.:format)   meds#show 
         PATCH /meds/:id(.:format)   meds#update 
         PUT /meds/:id(.:format)   meds#update 
         DELETE /meds/:id(.:format)   meds#destroy 
        root GET /       meds#index 
+0

Можете ли вы показать больше о 'new.html.erb'? Я не вижу кнопку отправки. – SteveTurczyn

+0

Простите за это! Исправлено: – winston

+0

Попробуйте сохранить модель с помощью 'Med.create! (Med_params)' в действии 'MedsController # create' и проверьте, есть ли у вас какая-либо ошибка проверки. Вы также можете поместить отладчик и проверить состояние этого объекта. – mrodrigues

ответ

0

Попробуйте это в действии: создать

def create 
    @med = Med.create(med_params) 

    if @med.save 
    flash[:notice] = "Med was successfully created" 
    redirect_to med_path(@med) 
    else 
    flash[:error] = "Med was not successfully created" 
    render :new 
    end 
end 

и добавить к первой строке index.html.erb

<p id="notice"> 
    <%= notice %> 
</p> 
+0

Не работает. Уведомление действительно работало. Он показал, когда я входил (используя программу), но не обнаружил ошибку после нажатия кнопки «Отправить». Ничего не происходит, кроме изменения URL-адреса. – winston

+0

Да, конечно, не ударяйте свое действие. Я уверен, что он связан с этим http: // stackoverflow.com/questions/4104474/rails-3-utf-8-query-string-show-up-in-url –

+0

Я бы попробовал ответить на @ PaulAnnesley с этой страницы –

0

попробовать это your new.html.erb

<%= simple_form_for @med, :url => { :action => "create" } do |f| %>

+0

Спасибо за ответ, но, к сожалению, приведенный выше код не устранил проблему – winston

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