Ruby on rails 关联模型中的Rails用户ID,为什么可以';我给用户打电话';什么信息?
我有一个会议表,它有一个请求者id和请求者id,这两个id都是用户id(使用Desive) 调用请求者\u id.first\u name时: 看法 它表示nil:NilClass的未定义方法“first_name” 我不确定这是否有任何关联,但当我搜索路线时,由于某种原因,所有会议都没有路径。它只是说:Ruby on rails 关联模型中的Rails用户ID,为什么可以';我给用户打电话';什么信息?,ruby-on-rails,ruby,devise,has-many,Ruby On Rails,Ruby,Devise,Has Many,我有一个会议表,它有一个请求者id和请求者id,这两个id都是用户id(使用Desive) 调用请求者\u id.first\u name时: 看法 它表示nil:NilClass的未定义方法“first_name” 我不确定这是否有任何关联,但当我搜索路线时,由于某种原因,所有会议都没有路径。它只是说: PUT /languages_users/:id(.:format) languages_users#update DELETE /languages_use
PUT /languages_users/:id(.:format) languages_users#update
DELETE /languages_users/:id(.:format) languages_users#destroy
GET /meetings(.:format) meetings#index
POST /meetings(.:format) meetings#create
GET /meetings/new(.:format) meetings#new
GET /meetings/:id/edit(.:format) meetings#edit
GET /meetings/:id(.:format) meetings#show
PATCH /meetings/:id(.:format) meetings#update
PUT /meetings/:id(.:format) meetings#update
DELETE /meetings/:id(.:format) meetings#destroy
我的一些配置/routes.rb
Rails.application.routes.draw do
resources :meetings
resources :meetings
devise_for :users
root 'welcome#index'
end
app/model/meetings.rb
class Meeting < ActiveRecord::Base
has_many :users
end
课堂会议
我如何调用用户表,请求者id中有整数,请求者id中有整数。从概念上讲,我在这里缺少或不理解什么
提前谢谢 是否尝试快速加载
@meeting=meeting.find(参数[:id])。包括(:请求者)
@requestor=@meeting.requestor我注意到您提供的代码中有一些改进的机会 首先,看起来好像您的routes文件中列出了两次
resources:meetings
。这可能是您在堆栈溢出问题中的复制粘贴错误,或者,如果这是实际代码,这可能是您说“由于某种原因,所有会议都没有路径”的原因
独立于此,让我们看看您的rake:routes
,特别是您的会议#show
路线:
GET /meetings/:id(.:format) meetings#show
通过这条资源丰富的路线,您可以将params[:id]
发送给控制器,在本例中是会议的id
现在,有一件事让我困惑。在视图代码中,您引用了@meetings
,这使我认为这是索引视图,而不是显示视图,在该视图中,我希望看到一个名为@meeting
的变量。我现在要继续讨论你的表演动作。不过,我将在最后回到您的索引视图
在show controller操作中,您有以下行:
@requestor = User.find(params[:requestor_id])
但是,您的路由没有向params散列提供请求者id
,这意味着您正在调用User.find(nil)
。使用编写的控制器代码,我希望您在点击show时遇到如下错误:ActiveRecord::RecordNotFound:找不到id为=
或类似的用户
相反,您要做的是找到您的会议,并根据找到的会议获取请求者
因此,您可以在控制器中执行以下操作:
app/controller/meetings\u controller.rb
def show
@meeting = Meeting.find(params[:id])
@requestor = User.find(@meeting.requestor_id)
end
def show
@meeting = Meeting.find(params[:id])
end
def index
@meetings = Meeting.all
end
<% @meetings.each do |meeting| %>
<tr>
<td><%= meeting.requestor.first_name %></td>
<td><%= meeting.requestee.first_name %></td>
<td><%= meeting.meeting_time %></td>
<td><%= meeting.accepted %></td>
<td><%= link_to 'Show', meeting %></td>
…在这一点上,我希望您的观点能够正确呈现。然而,有一种更为Rails-y的方法来实现这一点,它将我带到您的会议模型。以下是我要定义的关系:
class Meeting < ActiveRecord::Base
belongs_to :requestor, class_name: "User"
belongs_to :requested, class_name: "User"
end
…在你的索引视图中(我告诉过你我会回来的)
app/views/meetings/index.html.erb
def show
@meeting = Meeting.find(params[:id])
@requestor = User.find(@meeting.requestor_id)
end
def show
@meeting = Meeting.find(params[:id])
end
def index
@meetings = Meeting.all
end
<% @meetings.each do |meeting| %>
<tr>
<td><%= meeting.requestor.first_name %></td>
<td><%= meeting.requestee.first_name %></td>
<td><%= meeting.meeting_time %></td>
<td><%= meeting.accepted %></td>
<td><%= link_to 'Show', meeting %></td>
……等等
让我知道这是否有意义 您能编辑您的问题以显示两个文件吗?1.你能显示你的
config/routes.rb
文件吗。1.您能否显示应用程序/模型/会议.rb
文件的一部分?具体来说,您定义了任何关系(如与的关系)的部分有多个,有一个,或属于?是!现在添加。感谢您的关注。您的代码似乎应该可以正常工作。我猜问题出在您的参数[:requestor\u id]
。可能您没有正确发送id,或者您发送的id与数据库中的现有用户不匹配。您可以在show action开始时放置p参数[:requestor_id]
,查看它向控制器输出的内容。*向控制台输出抱歉。这是一个难以置信的帮助,我非常感谢您的详细回复。在处理这件事的过程中,有一件事让我挂断了电话,那就是,我是否需要将会议桌上的“requestor_id”更改为“requestor”,或者我是否同时处理这两个问题?谢谢公共轨道模式是,如果您有一个关系,例如属于:requestor
,它假定您有一个名为requestor\u id
的列,并且可以通过调用@meeting.requestor
来引用实际用户。(注意,您可以通过调用@meeting.requestor_ID
始终只获取ID本身,实际上这比仅获取请求者对象的频率要低得多)。这回答了你的问题吗?