Rails 3:使用二级关联重新加载部分

时间:2012-01-26 03:55:17

标签: ruby-on-rails ruby ajax ruby-on-rails-3 forms

我的申请结构如下:

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仍为空。请帮助我理解我做错了什么,我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

你没有显示你的视图代码,但我猜这是因为where正在返回一个对象集合而不是单个对象,如下所述:

.where vs find. ActiveRecord::Relation NoMethodError

在控制台中,在调试这些问题时,很容易错过输出中的括号,如[#<Reference id...]