Rails 3: извлекайте контент отдельно для каждой ассоциации через AJAX - PullRequest
0 голосов
/ 28 января 2012

В моей системе настроены следующие ассоциации:

class Book < ActiveRecord::Base
has_many : suggestions
has_many : comments
has_many : references

В представлении Показать модели моей книги я хочу предоставить пользователю возможность выбора (из выпадающего списка).) вид, который они хотели бы видеть.Так, например, если пользователь выбирает из этого выпадающего списка подсказки , то частичная перезагрузка с предложениями.Аналогично для остальных 3 вариантов.Чтобы достичь этого, я написал следующий метод в моей модели: book.rb :

def self.select_content_type(content_type)
case content_type

when "suggestions"
  # get the suggestions
  @book_suggestions = Book.suggestions.paginate(:per_page => 6, :page => params[:page])
  # return this
  return @book_suggestions

when "comments"
  # get the comments
  @book_comments = Book.comments.paginate(:per_page => 6, :page => params[:page])
  # return this
  return @book_comments

when "references"
  # get the references
  @book_references = Book.references.paginate(:per_page => 6, :page => params[:page])
  # return this
  return @book_references

end

end

Япытаюсь получить доступ к этому методу в действии «Show» моего book_controller.rb следующим образом:

@book_content = Book.select_content_type(params[:content_type])

В представлении Show у меня есть следующая форма для запроса getэтот метод:

   - form_tag  book_path(@book), :id=>"select_rel_form", :remote => true, :method => 'get' do               
      = text_field_tag :content_type, params[:content_type], :id=>"select_rel_type"
      = submit_tag "submit", :name => nil, :class=>"select_rel_submit"  

И в части с именем * _content * я получаю доступ к возвращаемому значению следующим образом:

- if !@book_content.nil?
  - @issue_relations.each do |relation|
    ...

Я получаю следующую ошибку:

NoMethodError (undefined method `suggestions' for #<Class:0x1177f4b8>):
app/models/book.rb:93:in `select_content_type'
app/controllers/books_controller.rb:21:in `show'

Пожалуйста, помогите мне понять, как я могу это исправить.Если есть правильный и лучший способ добиться этого, пожалуйста, наставьте меня.Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 января 2012

Не ответ, но ваш метод self.select_content_type может быть намного СУШЕН:

def self.select_content_type(content_type)
  return unless ['suggestions', 'comments', 'references'].include?(content_type)
  Book.send(content_type.to_sym).paginate(:per_page => 6, :page => params[:page])
end

Кроме того, вы используете params [: page], но никогда не переходите в params. Вы должны просто оставить этот метод в контроллере, не зная, почему он должен быть в модели.

0 голосов
/ 28 января 2012

Ваш тег формы имеет тип select_content_type и, как говорится, он не определен, но там должно быть что-то вроде book_path (@book)

...