Моя форма рельсов не отправлена ​​или не перенаправлена - PullRequest
0 голосов
/ 24 января 2019

Моя форма приглашения не сохраняется.Там нет ошибок.Почта не отправляется, и я не перенаправлен на корневой путь.

Контроллер приглашений:

class InvitesController < ApplicationController
  def new
    @invite = Invite.new
  end

  def create
    @invite = Invite.new(invite_params)
    if @invite.save
      InviteMailer.invite_user(@invite).deliver_now
      flash[:success] = "You have successfully sent an invite"
      redirect_to root_path
    else
      render 'new'
    end
  end

  private

    def invite_params
      params.require(:invite).permit(:email)
    end
end

Модель приглашений:

class Invite < ApplicationRecord
  belongs_to :user
end

Приглашения нового просмотра:

<h1>Invite your friend!</h1>
<%= form_for @invite , :url => userinvite_path do |f| %>
    <%= f.label :email %>
    <%= f.email_field :email %>
    <%= f.submit "Send" %>
<% end %>

Приглашает Mailer:

class InviteMailer < ApplicationMailer
  def invite_user(invite)
    @invite = invite
    mail to: invite.email, subject: "Invitation to Math-Scientist"
  end
end

Приложение Mailer:

class ApplicationMailer < ActionMailer::Base
  default from: 'noreply@example.com'
  layout 'mailer'
end

Просмотр Mailer (текст): Привет, Вы приглашены присоединиться к Math-Ученый от вашего друга.Зарегистрируйтесь сейчас: https://math -scientist.herokuapp.com / usersignup Надеюсь, вам понравится наш продукт!

Файл маршрутов:

Rails.application.routes.draw do
  root 'static_pages#home'
  get '/usersignup', to: 'users#new'
  get '/companysignup', to: 'companies#new'
  get    '/userlogin',   to: 'sessions#new'
  post   '/userlogin',   to: 'sessions#create'
  delete '/userlogout',  to: 'sessions#destroy'
  get '/userinvite', to: 'invites#new'
  post '/userinvite', to: "invites#create"
  resources :users
  resources :companies
  resources :invites
end

1 Ответ

0 голосов
/ 24 января 2019

Я предполагаю, что приглашение не сохраняется, потому что у вас есть belongs_to :user отношение.Так как рельсы 5 это по умолчанию требуется.Это означает, что либо , вы должны установить user_id перед сохранением, либо указать, что это необязательно.

Не устанавливайте в качестве идентификатора пользователя форму (в скрытом поле), поскольку это позволяет вмешиваться (например, кто-то редактирует форму перед ее отправкой).

Таким образом, в вашем контроллере вы можете сделать что-то вроде

@invite = Invite.new(invite_params)
@invite.user_id = current_user.id 
if @invite.save ...

или, если user на самом деле не требуется, вы также можете адаптировать свою модель

belongs_to :user, optional: true 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...