标签: has-and-belongs-to-many

Rails - HABTM关系...存储用户的复选框值

我试图弄清楚这个HABTM关系问题是为了我的数据库中的用户的利益存储.兴趣表包含具有id和名称的不同兴趣列表(即:id = 1,name ='Music')

我有一个用户模型=> user.rb

has_and_belongs_to_many :interests
Run Code Online (Sandbox Code Playgroud)

和兴趣模型=> interest.rb

has_and_belongs_to_many :users
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试从复选框列表中编辑或更新用户的兴趣选择.控制器看起来像=>

def edit
#@interests = Interest.find(:all)

  @title = "Edit Interest"
  @user = User.find(session[:user_id])
  @user.interest ||= Interest.new
  interest = @user.interest
  if param_posted?(:interest)
      if @user.interest.update_attributes(params[:interest])
          flash[:notice] = "Changes saved."
          redirect_to :controller => "users", :action => "index"
      end
  end
end
Run Code Online (Sandbox Code Playgroud)

而param_posted函数看起来像这样

  def param_posted?(sym)
  request.post? and params[sym]
  end
Run Code Online (Sandbox Code Playgroud)

视图逻辑如下所示:

<% for interest in @interest %>
<div>
<%= check_box_tag "user[interest_id][]", interest.id, @user.interests.include (interest) %>
<%= interest.name %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我认为一切看起来都很犹豫但是当我运行视图时我得到了错误:

InterestController#edit中的NoMethodError …

checkbox ruby-on-rails relational-database has-and-belongs-to-many

0
推荐指数
1
解决办法
2166
查看次数

Rails HBTM join_table覆盖table_name

我正在运行Rails 2.3.2并且正在执行:

class StandardWidget < ActiveRecord::Base
  has_and_belongs_to_many :parts, :join_table => "widgets_parts", :association_foreign_key => "widget_custom_id"
end

class Part < ActiveRecord::Base
  has_and_belongs_to_many :widgets, :join_table => "widgets_parts", :association_foreign_key => "part_custom_id"
end

p = StandardWidget.find(5)
p.widgets
Run Code Online (Sandbox Code Playgroud)

并得到错误

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'widgets_parts.standard_widget_id' in 'where clause': SELECT * FROM `widgets`  INNER JOIN `widgets_parts` ON `parts`.part_custom_id = `widgets_parts`.part_custom_id WHERE (`widgets_parts`.standard_widget_id = 5 )
Run Code Online (Sandbox Code Playgroud)

我怎样才能使这个工作?

关于HBTMRails文档说:

警告:如果要覆盖任一类的表名,则必须在任何has_and_belongs_to_many声明下声明table_name方法才能工作.

这是什么意思?

ruby-on-rails associations has-and-belongs-to-many tablename jointable

0
推荐指数
1
解决办法
1751
查看次数

删除 has_and_belongs_to_many 表中的记录 - Rails

我一直在寻找,但找不到关于如何删除 HABTM 表中记录的好答案。我想很多人都有同样的要求。

简单地说,我有学生、班级和班级_学生

我希望学生能够放弃课程,或删除已为该学生注册该课程的 HABTM 记录。

对此必须有一个简单的答案。有谁知道它是什么?

ruby-on-rails has-and-belongs-to-many

0
推荐指数
1
解决办法
2748
查看次数

Rails HABTM 设置、模型对象和 join_table 插入控制器设置

我有以下设置。

1 个产品有多个 Product_types。许多 Product_types 有 1 种类型。根据我对文档的理解,HABTM 关系。

我的模型是

class Product < ApplicationRecord
  has_and_belongs_to_many :types
end

class Type < ApplicationRecord
  has_and_belongs_to_many :products
end
Run Code Online (Sandbox Code Playgroud)

我有一个这样的连接表迁移

class CreateJoinTableProductTypes < ActiveRecord::Migration[5.1]
  def change
    create_join_table :products, :types do |t|
      t.index :product_id
      t.index :type_id
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个表单 - 希望创建正确,现在我在表单提交上发送了以下参数:

"product"=>{"name"=>"Product A", "description"=>"A cool product", "image_dir_path"=>"./",
"type"=>{"id"=>"1"}},"commit"=>"Create Product"}
Run Code Online (Sandbox Code Playgroud)

我想知道 1)提交用于在表单和控制器中创建产品的参数的最佳/rails 约定是什么?

2)我如何获得插入到连接表中的记录?

我有以下获取参数的方法

def product_params
  params.require(:product).permit(:name, :description, :image_dir_path, :type,)
end
Run Code Online (Sandbox Code Playgroud)

但即使这样我也可以在日志中看到 :type 的未经允许的参数

目前我的控制器只有:

@product = Product.new(product_params)
Run Code Online (Sandbox Code Playgroud)

我非常感谢任何有关创建该对象的 Rails 方式的建议。我已经阅读了 HABTM 的 api …

controller join model ruby-on-rails has-and-belongs-to-many

0
推荐指数
1
解决办法
4061
查看次数