我嘗試創建一個帶有表單的項目頁面,以向其他用戶發送邀請。業主(已創建項目)可以邀請其他用戶參與項目。Ruby on rails-在項目頁面上創建邀請而不渲染新的動作
眼下,這裏是代碼:
的意見/項目/ 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的邀請 - > Mongoid ),但是當我提交表單(該項目/顯示頁),我有這樣的錯誤:
No route matches [POST] "/invites/new"
這是正常的,但我想硝酸鉀w:
- 如何在不顯示視圖的情況下在數據庫中插入數據?
- 如何通過電子郵件地址訪問用戶ID? (在DB中)
謝謝!
注意:不要猶豫,問你是否需要更多的代碼來回答
您希望將表單動作指向'create'路徑而不是'new'。按照Rails Restful約定,'new'動作將響應GET請求,而不是'POST'請求。要通過'POST'(表單提交)到達'create'方法,您應該將路徑更改爲'invites_path' –
@AlexandreAngelim感謝您提供此信息!如果你看看invites_controller,我怎麼能存儲'@invite'?以及我怎樣才能訪問project_id和收件人的ID,取決於他的電子郵件? –
在這種情況下,我會做的是將'invites'資源嵌套在路徑文件中的項目中,並將表單更改爲指向該嵌套路由。我不知道你爲什麼特別選擇使用'form_tag'而不是'form_for',並使用實際的邀請字段(如電子郵件)來創建新的邀請。您必須使用您當前的方法來更改幾件事情。表單動作應指向'project_invites_path(@project)',在'InvitesController#create'中,您將可以訪問'params [:project_id]'。我想你可以從那裏弄清楚。 –