Создание групп и необходимость сохранения устройства пользователя в базе данных в приложении rails - PullRequest
1 голос
/ 23 февраля 2012

Я создаю группы в приложении rails и мне нужно сохранить пользователя в базе данных (я так думаю, по крайней мере), чтобы я мог показать созданную по электронной почте пользователя на странице шоу.Я не могу использовать current_user, потому что он меняется при каждом входе в систему.ниже приведен код, который я использую, и в результате получаем ActiveRecord::RecordNotFound in GroupsController.Поэтому мне нужно знать, как сохранить пользователя в базе данных (если это правильно), чтобы заставить эту работу работать правильно или как мне заставить ее работать правильно?

модель пользователя

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me

  has_many :groups
end

модель группы

 class Group < ActiveRecord::Base
  belongs_to :user
end

миграция устройства пользователя (только необходимая часть)

t.has_many: groups

миграция группы

t.belongs_to :user

метод создания группового контроллера

def create
   @user = User.find(params[:id])
    @group = @user.groups.build(params[:id])
    respond_to do |format|
      if @group.save
        format.html { redirect_to @group, notice: 'Group was successfully created.' }
        format.json { render json: @group, status: :created, location: @group }
      else
        format.html { render action: "new" }
        format.json { render json: @group.errors, status: :unprocessable_entity }
      end
    end
  end

новый метод группового контроллера

 def new
    @user = User.find(params[:id])
    @group = @user.groups.build(params[:id])

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @group }
    end
  end

1 Ответ

0 голосов
/ 23 февраля 2012

Ваша настройка здесь не имеет особого смысла.В новом действии вы не должны искать пользователя.Скорее всего, если ваша маршрутизация используется правильно, вы даже не получите parma [: id].То же самое касается метода create, который (как следует из названия) должен создавать новую запись пользователя, а не искать ее.

Новое действие должно создавать только новую запись (без сохранения), например

def new
  @user = User.new
  ... # no building of groups here, since record is still empty, does not even have an id
end

теперь он должен использовать этот пользовательский объект для визуализации формы ввода в new.html.erb

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

def create
  @user = User.new(params[:user])
  if @user.save
    # maybe create some groups here
    redirect_to @user
  else
    render :action => "new"
  end
end

На данный момент это не имеет ничего общего с разработкой и аутентификацией пользователя.

Это только приблизительный обзорпокажите вам наиболее распространенный процесс (как вы могли бы найти в любом хорошем учебном пособии по RoR). В противном случае ваш вопрос не очень ясен о том, что именно вы хотите делать и как это связано с devise и current_user.Скорее всего, у вас будут какие-то контроллеры и действия, которые позволят пользователю видеть свою электронную почту, группы и другие данные, специфичные для пользователя.В этом случае эти контроллеры должны будут использовать current_user (после входа в систему).Многие проекты имеют дополнительные функциональные возможности для интерфейсов администратора, которые позволяют конкретному пользователю просматривать списки пользователей и их данные.В этом случае вы будете использовать current_user, чтобы убедиться, что у пользователя есть права администратора, а также другие функции поиска и поиска для отображения данных администрируемых пользователей.

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