Пытаюсь добавить списки в свои коллекции (form_for, маршрутизация)

Привет, ребята, я пытаюсь добавить списки в свои коллекции. Я новичок в рельсах, любая помощь будет оценена по достоинству. В настоящее время я пытаюсь создать форму для создания нового списка, но новые/создать действия, похоже, испорчены.

Списки в конечном итоге будут жить в представлении коллекций позже через ajax.

В конечном итоге цель состоит в том, чтобы каждый пользователь владел несколькими коллекциями, и в каждой коллекции будет несколько списков, в каждом из которых будет несколько элементов.

Коллекции

class CollectionsController < ApplicationController

def index
    @user = User.find(current_user)
    @collection = Collection.where(:user_id => current_user.id)
end

def new
    @collection = Collection.new
end

def show
    @collection = Collection.find(params[:id])
    @list = List.all
end

def create
    @collection = Collection.new(collection_params)
    @collection.user_id = current_user.id
    # render :text => CGI.escapeHTML(@collection.inspect)
    if @collection.save
        redirect_to root_path(@user)
    else
        render 'new'
    end
end

def edit
    @collection = Collection.find(params[:id])
end

def update
    if @collection.update(collection_params)
        redirect_to root_path(@user)
    else
        render 'edit'
    end
end

def destroy
    @collection.destroy
    redirect_to root_path(@user)
end

private
  def collection_params
    params.require(:collection).permit(:alias, :notes, :visibility)
  end
  def find_collection
    @collection = @user.collection.find(params[:id])
  end
end

Списки

class ListsController < ApplicationController
def index
    @list = List.all
end

def new
    @list = List.new
end

def create
    @collection = Collection.find(params[:collection_id])
    @list =
    @collection.lists.create(comments_params)
    if @collection.lists.save
    redirect_to root_path(@user)
    else
        render 'new'
    end
end
end

Пользователи

class UsersController < ApplicationController

def index
    @user = User.find(current_user)
    @collection = Collection.where(:user_id => current_user.id)
    @user.collection = Collection.where(:user_id => current_user.id)
    # render :text => CGI.escapeHTML(@collection.inspect)
end
end

Ссылка, которую я пытался

<%= link_to '<i class="fa fa-plus-square"></i> Add Subcategory'.html_safe, new_collection_list_path(@collection.id)  %>

Текущие маршруты

devise_scope :user do
authenticated :user do
  root 'collections#index', as: :authenticated
   resources :collections do
    resources :lists
  end
end

Ошибка form_for

<%= form_for([@collection, @collection.lists.build]) do |f| %>

<% end %>

Модели

Users has_many :collections


Collections belong_to :user
has_many :lists


Lists belong_to :collection

person Gillzilla    schedule 17.04.2014    source источник
comment
Вы используете Rails 3 или 4?   -  person Mike Waldrup    schedule 18.04.2014


Ответы (1)


Измените свой ListsController на новый и создайте следующие действия:

def new
  @collection = Collection.find(params[:collection_id])
end

def create
  @collection = Collection.find(params[:collection_id])
  @list = @collection.lists.build(params[:list])
  if @list.save
    redirect_to root_path(@user)
  else
    render 'new'
  end
end
person dostu    schedule 17.04.2014
comment
После его изменения я все еще получаю неопределенный метод для «списков». Используя ‹%= form_for([@collection, @collection.lists.build]) do |f| %› в файле new.html.erb. Я должен упомянуть в db, коллекциях ссылки на пользователей и списки ссылок на коллекции. Если это важно - person Gillzilla; 18.04.2014
comment
Вы уверены, что в вашей модели коллекции есть строка has_many :lists? - person dostu; 18.04.2014
comment
А! Большое вам спасибо, теперь я получаю сообщение об ошибке «неизвестный атрибут: collection_id», но я чувствую себя в миллион раз ближе. - person Gillzilla; 18.04.2014
comment
Вам нужно иметь поле collection_id в таблице «списки». - person dostu; 18.04.2014
comment
ах, это было во множественном числе, спасибо, чувак, я смотрел на это весь день. Я очень ценю это! - person Gillzilla; 18.04.2014
comment
Нет проблем, я рад помочь. - person dostu; 18.04.2014
comment
Эй, мне было интересно, как я буду вкладывать следующий ресурс? Итак, в коллекциях есть_много списков, а в списках есть_много ссылок. У меня есть цикл, ‹% (at) collection.lists.each do |list| %› и внутри цикла я хочу затем пройтись по всем ссылкам каждого списка, но ‹% (at) collection.lists.links.each сделать %› и или ‹% (at)list.links.each сделать %› def не работает, что я должен изучить? Моя интуиция говорит, что я отстой в ORM. (at) == @stack не позволил бы мне отправить их туда. - person Gillzilla; 19.04.2014