Rails 3: создайте экземпляр с 3 внешними ключами - PullRequest
2 голосов
/ 22 декабря 2010

Наличие таблицы отзывов:

# Table name: reviews
#
#  id          :integer         not null, primary key
#  wsp_id      :integer
#  service_id  :integer
#  user_id     :integer
#  description :text
#  rating      :integer
#  created_at  :datetime
#  updated_at  :datetime
#

  belongs_to :wsp
  belongs_to :service
  belongs_to :user

Как создать обзор для службы и передать wsp_id и user_id?Нужно ли использовать вложенные маршруты?

Я могу сделать @user.reviews.new(params[:review]), но не могу передать wsp_id и service_id.

Вот мои обзорысоздать контроллер.

 def create
    @review = current_user.reviews.new(params[:review]) 

    if @review.save
      #Saved
    else
      #Error, not saved
    end
  end

Что я делаю не так?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 22 декабря 2010

routes.rb

resources :services do
   resources :review
end

resources :review, :only => [:create]

Таким образом, вы сможете создать обзор самостоятельно, без вложений. Нет необходимости читать данные в вашей форме и как-то вставлять их в URL-адрес действия :) Это ужасно, но вы можете сделать это с помощью javascript, но в основном это отвратительно.

На ваш взгляд

= form_for(review) do |f|
  = f.collection_select :service, Service.all
  = ..more model fields..
0 голосов
/ 08 февраля 2011

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

def new
  @anime = Anime.new
  user_id = session[:user_id]
end

def create
  @anime = Anime.new(params[:anime])
  @anime.user_id = session[:user_id]
end
0 голосов
/ 22 декабря 2010

Вы пытались вложить параметры (например, params[:review][:service_id]) и затем передать params[:review]?

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