Создать новый объект из вложенных ресурсов для нового метода действия - PullRequest
0 голосов
/ 21 октября 2011

Предположим, у меня есть эта ассоциация:

class User < ActiveRecord :: Base
  has_one :car
end
class Car < ActiveRecord :: Base
  belongs_to :user
end

маршруты:

resources :users do
  resources :cars
end

Тогда какой будет код в "новом" методе действия в CarsController

class CarsController < ApplicationController

  def new
    #??? what's necessary to be put here, 
    # if I have request 'localhost:3000/users/1/cars/new'
  end
  ...
end

Сможет ли Rails все выяснить автоматически, чтобы мне не приходилось писать код в методе 'new'?Кроме того, поскольку действие 'new' сгенерирует помощника по форме form_for (@car), как я могу создать этот автомобильный объект

Правильно ли это?

class CarsController < ApplicationController
  def new
    @user = User.find(params[:user_id])
    @car = @user.build_car({})
  end
end

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Ты довольно близко, Бабуин.Я бы на самом деле сделал:

class UsersController < ApplicationController
  def new
    @user = User.new
    @car = @user.cars.build
  end
end

Но если вы не хотите создавать Автомобиль одновременно с пользователем, попробуйте:

class CarsController < ApplicationController
  def new
    @user = User.find(params[:user_id])
    @car = @user.cars.build
  end
end

Я обнаружил, что nested_form railscast чрезвычайнополезно при выполнении подобных вещей.На самом деле, я думаю, что вы, вероятно, многое из этого получите (и с помощью гема nested_form).

railscasts_196-nested-model-form-part-1

0 голосов
/ 21 октября 2011

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

Если у вас нет параметров для передачи в машину, кстати, вы можете просто запустить @user.build_car без аргументов. Вам также нужно будет специально указать помощнику form_for, что вы вкладываете автомобиль под пользователем: form_for [@user, @car] В противном случае пункт назначения формы будет /cars вместо /user/1/cars.

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