Создать переменную, которая может быть определена и доступна для нескольких контроллеров в Rails - PullRequest
1 голос
/ 08 января 2012

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

Мой код для создания нового элемента в списке (он находится в items_controller):

def create

    @list =
    @new_item = @list.items.build(params[:item])
    if @new_item.save
      flash[:success] = "Item saved!"
    end
    redirect_to root_path
  end

И проблема в том, что я не уверен, как определить, каким должно быть @list. У меня есть переменная current_user (на основе сеанса) для создания нового списка, но в сеансе только один пользователь и несколько списков в сеансе, поэтому я не могу просто скопировать этот метод.

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

Ответы [ 2 ]

1 голос
/ 08 января 2012

Вместо того, чтобы хранить переменную, вы должны отслеживать список, используя параметры URL.Вам нужно будет изменить форму, чтобы она включала параметр list_id.Затем в контроллере, когда вы создаете элемент списка, выполните что-то вроде:

@list = List.find params[:list_id]
@new_item = @list.items.build params[:item]

Или, если вы включили в свои параметры параметр items[list_id], то в Rails он будет доступен в params[:item][:list_id], поэтомувы должны просто сделать:

@new_item = ListItem.create params[:item]

Если вы сделаете это вторым способом, просто добавьте проверку в модель ListItem, чтобы гарантировать наличие list_id и список, на который она указываетк существованию.

1 голос
/ 08 января 2012

У listItem должен быть внешний ключ к модели списка, а у модели списка должен быть внешний ключ к учетной записи.Таким образом, вы сможете легко пройти через структуру.

class ListItem  < ActiveRecord::Base
  belongs_to :list
end

class List <  < ActiveRecord::Base
  belongs_to :account
  has_many :list_items
end

class Account <  < ActiveRecord::Base
  has_many :lists
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...