Создание выпадающего поля категории в Ruby on Rails с использованием вложенных форм и has_many: through - PullRequest
0 голосов
/ 13 марта 2011

Редактировать: похоже, что определение @categories снова в методе создания задачи позволило устранить ошибку.Все еще работаю над обновлением категории, когда я отправляю задачу, потому что сейчас она игнорируется.Любые идеи?

Привет всем,

Я пытаюсь создать раскрывающийся список в моем первом проекте Rails, чтобы выбрать из списка категорий для задачи.Я использовал модель категоризации, чтобы связать модель задач с категорией.

После некоторых усилий у меня появился раскрывающийся список, который правильно отображается в новой форме задачи, но когда я нажимаю кнопку Отправить,Форма дает следующую ошибку:

NoMethodError in Tasks#create

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map

Любая помощь, которую вы можете предоставить, очень ценится.Вот код, который я использую (выдержка для краткости) ...

Соответствующая часть моей новой формы задачи (HAML):

= f.fields_for :categorization do |sub|
    = sub.label :name, 'Category'
    = sub.collection_select(:category_id, @categories, :id, :name, :include_blank => 'Select a Category')

tasks_controller.rb:

def new
    @task = Task.new
    @categories = Category.all
end

def create
    @task = current_user.tasks.build(params[:task])
    if @task.save
        flash[:success] = "Task created!"
        redirect_to root_path
    else
        render 'new'
    end
end

классификация.rb:

class Categorization < ActiveRecord::Base
    belongs_to :task
    belongs_to :category

    validates :task_id, :presence => true
    validates :category_id, :presence => true
end

category.rb:

class Category < ActiveRecord::Base
    has_many :categorizations, :dependent => :destroy
    has_many :tasks, :through => :categorizations

    validates :name, :presence => true
end

task.rb

class Task < ActiveRecord::Base
    attr_accessible :title, :body

    has_many :categorizations, :dependent => :destroy
    has_many :categories, :through => :categorizations

    accepts_nested_attributes_for :categorizations

    validates :title, :presence => true
    validates :body, :presence => true
end

rout.rb:

resources :tasks

resources :categories do
    member do
        get :tasks
    end
end

Есть мысли?Большое спасибо за то, что взглянули, и дайте мне знать, если вам нужно что-нибудь еще, чтобы помочь.

Haidn

Ответы [ 2 ]

0 голосов
/ 13 марта 2011

ОК, я собираюсь попытаться выяснить, как правильно реализовать сохранение самостоятельно, но я нашел решение для моей первоначальной проблемы, которая снова объявляла @categories в моем методе создания задачи.Надеюсь, это кому-нибудь поможет!

0 голосов
/ 13 марта 2011

Я думаю, вам нужно добавить следующую строку в ваш файл категоризации.rb:

attr_accessible :category_id

Без этой строки вы не можете установить category_id в методе сборки, который вы используете в tasks_controller.rb

Дайте мне знать, если это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...