0

У меня есть форму для людей, которые могут пожертвовать. Для этого требуется адрес электронной почты и имя. Я еще не добавил stripe .. просто пытаюсь получить форму для работы в первую очередь и сохранить их адрес электронной почты в db.Проверка модели, вызывающая ошибку Rails 4

Когда я добавляю подтверждение валидации на мою модель, он ничего не примет. Он просто возвращает уведомление f.error. Когда я избавляюсь от валидаций, форма отправляется успешно, но ничего не сохраняется в базе данных. Консоль rails просто возвращает nil для имени и электронной почты.

Все еще новый для рельсов, возможно, что-то простое. Любые рекомендации были бы замечательными.

donation.rb (модель):

class Donation < ActiveRecord::Base 
    attr_accessor :name, :email 

    validates :name, 
    presence: true 

    validates :email, 
    presence: true 
end 

donations_controller:

class DonationsController < ApplicationController 
    def new 
    @donation = Donation.new 
    end 

    def create 
    @donation = Donation.new(params[donation_params]) 
    if @donation.valid? 
     redirect_to root_path, notice: "Thank you. We have received your donation." 
    else 
     flash[:alert] = "An error occurred, please try again." 
     render :new 
    end 
    end 

private 

    def donation_params 
    params.require(:donation).permit(:name, :email) 
    end 
end 

routes.rb:

get 'donations', to: 'donations#new', as: 'donations' 
post 'donations', to: 'donations#create' 

new.html.erb (вид донорства):

<body class ="CU"> 
    <div class="authform"> 
    <%= simple_form_for @donation, :url => donations_path do |f| %> 
    <h1 style = "text-align:center; color:black;">Donate</h1> 
    <%= f.error_notification %> 
    <div class="form-group"> 
     <%= f.text_field :name, placeholder: 'Name', :autofocus => true, class: 'form-control' %> 
    </div> 
    <div class="form-group"> 
     <%= f.text_field :email, placeholder: 'Email', class: 'form-control' %> 
    </div> 
    <%= f.submit 'Donate', :class => 'btn btn-lg btn-danger btn-block' %> 
    <% end %> 
    </div> 
</body> 

Сообщите мне, если вам нужно что-нибудь еще. Спасибо вам, ребята.

ответ

3

Эта часть

@donation = Donation.new(params[donation_params]) 

должно быть на самом деле:

@donation = Donation.new(donation_params) 

Кроме того, ваш метод создания не сохранить запись. Использовать save вместо valid?

Также почему вы положили лозунг в своих определениях валидации?

Кроме того, использование RESTful маршрутов, то есть:

resources :donations 

вместо того, чтобы вручную определения каждого маршрута.

Кроме того, поскольку вы используете strong params, вам не нужен attr_accessor (который должен был быть attr_accessible - это случай рельсов, но что бы то ни было). Вы должны использовать attr_accessor для определения виртуальных атрибутов, но я уверен, что это было не так, поскольку name и email - это базы данных, поддерживаемые полями.

И, наконец, пройдите через Rails guides - вы найдете всю необходимую информацию.

+0

@ Kathan не нуждается в этом 'attr_accessor: name,: email'. –

+0

Благодарим вас за быстрый ответ. Когда я использую 'resources: donations' вместо того, чтобы вручную определять маршруты, я получаю эту ошибку:' Индекс действия 'не найден для DonationsController. Однако я изменил все остальное, и он работает: D – Kathan

+0

@AndreyTurkin отредактирован, thx –

0

Потому что вы не сохраните его, попробуйте это if @donation.save вместо if @donation.valid? в create

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