以下是我的协会:
用户模型(user.rb)
class User < ActiveRecord::Base
has_many :projects
attr_accessible: :available, :department, :name, :skills, :title, :photo
end
项目模式(project.rb)
class Project < ActiveRecord::Base
belongs_to :user, :foreign_key => :user_id
attr_accessible :project_name
end
这是我的show.erb.html文件中的代码
<%= @user.projects.each do |project| %>
<p><%= projects.project_name %></p>
<% end %>
但这只显示两个括号,如“[]”。这让我觉得它是一个空阵列。
因此,当我在rails控制台中运行Project.find(1)
以查看项目是否与用户关联时,它会吐出:
=> #<Project id: 2, project_name: "This is a project. ", created_at: "2012-11-12 02:29:28", updated_at: "2012-11-12 02:29:28", user_id: nil>
用户ID为零?是什么给了什么?!
任何人都知道我做错了什么?谢谢!
编辑:
以下是添加外键的迁移:
class AddForeignKeyToProjects < ActiveRecord::Migration
def change
add_column :projects, :user_id, :integer
end
end
编辑2
以下是控制器中的实例(这可能是问题)
项目控制器
def new
@project = Project.new(params[:project], params[:user_id])
end
用户控制器
def show
@user = User.find(params[:id], params[:project_name])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
end
答案 0 :(得分:1)
在迭代project
中,您的目标不是projects
<%= @user.projects.each do |project| %>
<p><%= project.project_name %></p>
<% end %>
---以下是将项目分配给用户的例子--- ---在这个代码我用户捐赠和成员,虽然相同的想法---
donation = Donation.new(amount: random_value.to_c,
date_given: Random.date(1000).to_date,
donation_type: ['tithes', 'offering', 'undisclosed', 'building-fund'].sample)
member = Member.all.sample
donation.member= member
donation.save
答案 1 :(得分:1)
如果您使用了常规名称,则表示您在项目表格中有user_id
,您无需在项目foreign_key >模型,你只需要:
belongs_to :user
我不确定这是不是你的错字:
<%= projects.project_name %> should be <%= project.project_name %>
关于你的控制器,我想你有current_user
方法,它定义当前登录的用户。所以如果你想创建一个与current_user的id相关联的user_id
的新项目,你应该编写这样的代码:
def new
@project = current_user.projects.build # Create new project with user_id = current_user.id
end
如果您要创建新项目,您的create
操作会喜欢这样:
def create
@project = current_user.projects.create(params[:project])
if @project.save # save project success
# do some thing
else
# do some thing
end
end
这些是我可以告诉你的基本动作,因为我不知道你是如何建立表格的,以及你的路线是怎样的。
当您向用户显示时,如果您使用了RESTful路线,则您的路线将如下所示:
`abc.com/users/:id/show`
什么是RESTful路线?如果您想知道,请查看此Recource routing。
然后,如果您想查找用户,可以使用params[:id]
:
def show
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
end
您找不到params[:project_name]
的用户,您的用户模型没有该属性,它是项目的属性。