Моя форма 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
Можете ли вы показать больше о 'new.html.erb'? Я не вижу кнопку отправки. – SteveTurczyn
Простите за это! Исправлено: – winston
Попробуйте сохранить модель с помощью 'Med.create! (Med_params)' в действии 'MedsController # create' и проверьте, есть ли у вас какая-либо ошибка проверки. Вы также можете поместить отладчик и проверить состояние этого объекта. – mrodrigues