ruby-on-rails-3 - Ruby on Rails 3 : HABTM with new controller action

标签 ruby-on-rails-3 routes has-and-belongs-to-many

我正在尝试为 has_and_belongs_to _many 用户的项目模型创建 M:N 关系。一个用户可以加入多个项目,但项目也有多个用户。我想我不需要直通,因为我的连接表不会有另一列。

所以我将关联包含在我的两个模型中(has_and_belongs_to_many :projects 和 has_and_belongs_to_many :users) 并设置新的迁移:

class AddProjectsUsersTable < ActiveRecord::Migration
  def self.up
    create_table :projects_users, :id => false do |t|
      t.references :project, :user
    end
  end

  def self.down
    drop_table :projects_users
  end
end

这正在工作.. 我不确定接下来的事情是否正确 - 但我尝试了一些事情。 我尝试在我的用户 Controller 中创建一个新操作,在其中我可以设置该用户与项目的关系。

  def joinProject
    @user = current_user
    @user.projects = Project.find(params[:id])

    respond_to do |format|
        format.html { redirect_to @project, notice: 'Successfully joined project.' }
        format.json { head :no_content }
    end
  end

这可能是错误的方式,因为它说:“undefined method 'each' for #<Project:0x00000103f10028>

我还能如何设置这种关系? 看来我不太明白这种 HABTM 关系是如何运作的..

有人可以帮我吗?

一些可能有趣或错误的进一步信息;)

我创建了这条路线:

  match "joinProject_user/:id" => "users#joinProject", :as => :joinProject

我在我的 View 中调用了 Controller 操作,如下所示:

 <%= link_to 'Join', joinProject_path(project) %>

最佳答案

Controller 操作的第二行应该是:

@user.projects += [Project.find(params[:id])]

甚至

@user.project_ids += [params[:id]]

这会将传递的项目附加到现有项目集合中。 User#projects= 方法(由 habtm 关联定义)需要一个集合而不是 Project 对象。在内部,它尝试调用 each,因此失败,因为项目不响应 each

关于ruby-on-rails-3 - Ruby on Rails 3 : HABTM with new controller action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242006/

相关文章:

ember.js - Emberjs - 如何在没有父路由内容的情况下渲染嵌套路由模板?

mysql - CakePHP 3.x - ManyToMany 上的 SUM()

php - 创建干净的 HABTM 查询

ruby-on-rails - 创建资源后如何重置我选择的选择菜单?

Angular 2 路由器导航无法使用相同的 url 第二次工作

ruby - Controller 的简单路由导致 ArgumentErrorr

node.js - Sequelize BelongsToMany 自引用反向 SQL QUERY

javascript - 如果对象为空,则在 View 中有条件地显示元素

mysql - Rails 复杂 SQL

ruby-on-rails-3 - 如何测试 rspec/capybara 中不存在的 html 标签