我尝试创建一个带有表单的项目页面,以向其他用户发送邀请。所有者(已创建项目的人)可以邀请其他用户参与该项目。
现在,这是代码:
视图/项目/ 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"
这很正常,但我想知道:
谢谢!
注意:不要犹豫,询问您是否需要更多代码来回答
答案 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;