我在尝试将模型中的 id 传递到不同的控制器时遇到了很多麻烦。我读过类似的帖子并尝试了不同的解决方案,但似乎无法将 Event id 传递到 Invitations 控制器中。
更新
目标是用户在查看他们创建的事件时将单击邀请链接。此链接需要保存来自它的事件的 ID,以便邀请可以与该事件相关联。
在我的模型中,对于事件模型,我有“has_many”邀请,对于邀请模型,我有“belongs_to :events”
这是我的代码。
我的 Events 文件夹中的 show.html.erb:
<%= link_to 'Invite guests', invitations_path(:event => @event.id) %>
此链接映射到“invitations#new”:
<% provide(:title, 'Invite Guests') %>
<h1>Invite your guests</h1>
<%= form_for(@invitation) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :name %>
<%= f.text_field :name, :placeholder => "Name" %> <br>
<%= f.label :email %>
<%= f.text_field :email, :placeholder => "Email" %> <br>
<%= f.submit "Send" %>
邀请控制器:
def index
end
def new
@invitation = Invitation.new
end
def create
user = current_user.events.find(params[:event])
@invitation = user.invitations.build(params[:invitation])
if @invitation.save
flash[:success] = "Invitations sent!"
redirect_to user
else
render '/home'
end
end
我知道如果我更换:
user = current_user.events.find(params[:event])
和:
user = current_user.events.find(1)
路线:
resources :users
resources :sessions, only: [:new, :create, :destroy]
resources :events, only: [:show, :create, :destroy]
resources :invitations, only: [:new, :create]
root to: '/home'
match '/signup', to: 'users#new'
match '/signin', to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete
match '/events', to: 'events#new'
match '/invitations', to: 'invitations#new'
一切正常,但当然,这不合适,因为我正在硬编码事件 ID。我对 RoR 很陌生(大约 2 个月的经验),所以可能有更有效的方法来做到这一点。所以任何帮助将不胜感激。