当我创建新的项目记录时,我想在child(“ Projects”)中放置parent(在这种情况下,是“ Users”)ID。
也许代码无法获取ID。 你能教我什么不足的问题吗?
控制器
#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"]
答案 0 :(得分:1)
在您看来,您需要在表单路径中传递用户,例如:user_projects_path(@user)
但是,如果要将其链接到已登录的用户,那么传递用户ID并不是一个好主意,您可以直接从会话中获得该ID,因此可以在控制器中使用类似的方法:
#projects_controllers.rb
def create
current_user.projects.new(name: params[:name])
end
如果您的控制器中没有current_user方法,则您可能在会话中存储了用户ID,在这种情况下,您的创建操作可能如下所示:
def create
user = User.find_by(id: session[:user_id])
user.projects.new(name: params[:name])
end