Ruby on rails 关联模型中的Rails用户ID,为什么可以';我给用户打电话';什么信息?

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

我有一个会议表,它有一个请求者id和请求者id,这两个id都是用户id(使用Desive)

调用请求者\u id.first\u name时:

看法

它表示nil:NilClass的未定义方法“first_name”

我不确定这是否有任何关联,但当我搜索路线时,由于某种原因,所有会议都没有路径。它只是说:

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本身,实际上这比仅获取请求者对象的频率要低得多)。这回答了你的问题吗?