我的申请结构如下:
class Study < ActiveRecord::Base
has_many :topics
class Topic < ActiveRecord::Base
has_many :references
我需要访问我的Study模型的show页面上的引用(study.topic.references)。但是,我需要根据(比如)主题的单选按钮选择来检索引用。因此,当用户点击某个主题时,我需要通过AJAX检索该特定主题的引用。
因此,我在Study模型中编写了以下方法:
class Study < ActiveRecord::Base
def self.topic_references(topic_id)
Reference.where(:topic_id => topic_id)
end
我在Study控制器Show中访问上面的方法如下:
class StudiesController < ApplicationController
@references= Study.topic_references(params[:topic_id])
我打算有一个远程表单来访问上面的方法并检索相应的引用。像这样:
- form_tag topic_references, :id=>"references_form", :method => 'get' do
= text_field_tag :topic_id, params[:topic_id], :value=>268
= submit_tag "Get references"
作为初始测试,我传递了主题ID的值(上面的值为268),但是,在视图中访问的@references仍为空。请帮助我理解我做错了什么,我怎样才能做到这一点?
答案 0 :(得分:0)
你没有显示你的视图代码,但我猜这是因为where
正在返回一个对象集合而不是单个对象,如下所述:
.where vs find. ActiveRecord::Relation NoMethodError
在控制台中,在调试这些问题时,很容易错过输出中的括号,如[#<Reference id...]
。