0

以下是我的联想:

  • 由于用户有很多项目
  • 一个项目属于一个用户

用户模型(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 %>

但这只是显示两个像这样的括号“[]”。这让我觉得这是一个空数组。

因此,当我Project.find(1)在 rails 控制台中运行以查看项目是否与用户相关联时,它会吐出:

   => #<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
4

2 回答 2

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
于 2012-12-01T19:01:24.383 回答
1

如果您使用约定名称,则表示您user_idProject表中有一个,您无需foreign_keyProject模型中指定,您只需要:

belongs_to :user

我不确定这是否是您的错字:

<%= projects.project_name %> should be <%= project.project_name %>

关于您的控制器,我想您有current_user定义当前用户登录的方法。因此,如果您想创建user_id与 current_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],您的用户模型没有该属性,它是项目的属性。

于 2012-12-02T13:56:43.833 回答