Как добавить родительский идентификатор модели в дочернюю модель - PullRequest
0 голосов
/ 12 октября 2018

Я хочу поместить родительский (в данном случае «Пользователи») идентификатор в дочерний («Проекты») при создании новой записи проекта.

Возможно, кодам не удается получить идентификатор в поле зрения.Не могли бы вы научить меня, в чем проблема?

Контроллер

#users_controllers.rb
def create
  @user = User.new(name:params[:name])
  @user.save
  redirect_to("/")
end 

    #projects_controllers.rb

 12   def create
 13     @user = User.find_by(id: params[:id])
 14     Project.new(
 15       name: params[:name],
 16       user_id: params[:id])
 17   end

Модель

#user.rb    
class User < ApplicationRecord
  has_many :projects
end

#project.rb
class Project < ApplicationRecord
  belongs_to :user, optional: true
end

Вид

#users.new.html.erb
<%= form_tag("/users", :method => :post) do %>
  <input name="name" value="<%= %>">
  <input type="submit" value="Registration">
<% end %>

#projects.new.html.erb
<%= form_tag(user_projects_path, :method => :post) do %>
  <input name="name" value= "" >
  <input type="submit" value="Create">
<% end %>   

Маршрутизация

#routes.rb
Rails.application.routes.draw do
  root 'users#index'
  resources :users do
    resources :projects, shallow: true
  end
end

Колонка

2.0.0-p643 :001 > User.column_names
 => ["id", "name", "created_at", "updated_at"] 
2.0.0-p643 :002 > Project.column_names
 => ["id", "name", "created_at", "updated_at", "user_id"] 

1 Ответ

0 голосов
/ 12 октября 2018

По вашему мнению, вам нужно передать пользователю путь формы, например так: user_projects_path(@user)

Однако, если вы хотите связать его с вошедшим в систему пользователем, то это не очень хорошоИдея передать идентификатор пользователя, у вас это будет доступно прямо из вашего сеанса, поэтому вы можете использовать что-то вроде этого в вашем контроллере:

#projects_controllers.rb
def create
  current_user.projects.new(name: params[:name])
end

Если у вас нет метода current_user, доступного в ваших контроллерах, вы можете хранить идентификатор пользователя в сеансе, в этом случае ваше действие создания может быть примерно таким:

def create
  user = User.find_by(id: session[:user_id])
  user.projects.new(name: params[:name])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...