Ruby on rails - 在项目页面上创建邀请而不渲染新操作

时间:2017-04-23 20:24:32

标签: ruby-on-rails ruby mongoid

我尝试创建一个带有表单的项目页面,以向其他用户发送邀请。所有者(已创建项目的人)可以邀请其他用户参与该项目。

现在,这是代码:

视图/项目/ show.html.erb

<div class="container">
    <h3> <%= @project.title %> </h3>
    <h6> Créé par <%= link_to @project.owner.username, user_path(@project.owner) %> </h6>
    <hr>
    <h3> Inviter des utilisateurs au projet </h3>

    <!-- form for search users -->
    <%= form_tag new_invite_path, method: :post, :class => 'form-inline' do %>
        <div class="form-group">
            <%= text_field_tag :search, params[:search], size: 30, class: 'form-control' %>
        </div>
        <%= submit_tag 'Ajouter au projet', class: 'btn btn-success' %>
    <% end %>
    <!-- end form for search users -->

    <!-- display users results -->
    <% @users.each do |user| %>
        <p> <%= user.username %> | <%= user.email %> </p>
    <% end %>
    <!-- end display results -->

</div>

控制器/ projects_controller.rb

class ProjectsController < ApplicationController
    def show
        @project = Project.find(params[:id])
        @users = User.search(params[:search])
    end

    def new
        @project = Project.new
    end

    def create
        @project = Project.new(project_params)
        @project.owner = current_user
        @project.members = []
        if @project.save
            puts @project
            redirect_to user_path(current_user)
        else
            puts 'something went wrong'
            puts @project.errors.full_messages
            render 'new'
        end
    end

    private
    def project_params
        params.require(:project).permit(:title, :description, :client, :deadline, :owner, :members)
    end
end

在项目页面上,我有一个Ajax表单,可以通过用户名和电子邮件查找所有用户。 现在,当我提交此表单时,我想创建一个邀请(通知,但我还没有开始通知系统)。所以,我创建了这个模型

class Invite
  include Mongoid::Document

  field :email

  belongs_to :project
  belongs_to :sender_id, :class_name => 'User'
  belongs_to :recipient_id, :class_name => 'User'
end

控制器

class InvitesController < ApplicationController

    def new 
        @invite = Invite.new(email: params[:search], sender_id: current_user.id)
        byebug
        @invite.save
    end

    def create
        @invite = Invite.new(params[:search])
        if @invite.save
            flash[:success] = 'the invitation is send'
            redirect_to user_path(current_user)
        else
            render 'projects/show'
        end
    end

end

所以你可以看到,我想在我的数据库中保存邀请(MongoDB - &gt; Mongoid),但是当我提交表单时(在项目/节目页面上),我有这个错误:

No route matches [POST] "/invites/new"

这很正常,但我想知道:

  1. 如何在不渲染视图的情况下在我的数据库中插入数据?
  2. 如何通过电子邮件地址访问用户ID? (在DB中)
  3. 谢谢!

    注意:不要犹豫,询问您是否需要更多代码来回答

1 个答案:

答案 0 :(得分:1)

1)您可以在数据库中插入数据,而无需在控制器render :nothing => true, :status => 200上使用此行渲染任何内容 所以你的创建方法将是这样的

def create
    @invite = Invite.new(params[:search])
    if @invite.save
        flash[:success] = 'the invitation is send'
        render :nothing => true, :status => 200
    else
        render 'projects/show'
    end
end

这是错误的No route matches [POST] "/invites/new"当你尝试创建某些东西时,你需要去创建,而不是新的动作,只需更改表单上的url,因为你指的是错误的动作。 / p>

2)如果您有用户型号并希望通过电子邮件加载用户,则可以执行以下操作

User.find_by_email("the email of the user")

这是您的模型是用户和电子邮件所在的列,名为&#34; email&#34;