gpt4 book ai didi

ruby-on-rails - 无法让 'has_and_belongs_to_many' 工作

转载 作者:行者123 更新时间:2023-12-02 04:51:37 24 4
gpt4 key购买 nike

之前发过一篇关于此的帖子,但经过大量测试和更改后,它已经过时了。

我试图将用户和事件联系在一起。(一个用户可以有多个事件。一个事件可以有多个用户)。我几乎不是一个多用户议程的事情。

每当我创建一个新事件时,我都可以通过复选框选择将执行该事件的用户。

虽然我无法让它工作;用户不会出现在我的事件展示中。在我的节目中打印 @activity.users 结果为 #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_User:0x43d2158>但是循环它,或者检查我的 activities.js 没有显示任何内容(activity.js 在事件中显示“用户”:[]。所以我很确定它们没有正确关联。

这是一些代码:

activities.js索引方法

  def index
@activities = Activity.all
respond_to do |format|
format.html
format.js {render_json @activities.to_json(:include => [:pictogram ,:users]) }
end
end

事件形式(循环所有用户)

<%= form_for(@activity) do |f| %>
<% if @activity.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@activity.errors.count, "error") %> prohibited this activity from being saved:</h2>

<ul>
<% @activity.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :start_date %><br>
<%= f.date_select :start_date %>
</div>
<div class="field">
<%= f.label :end_date %><br>
<%= f.date_select :end_date %>
</div>

<div class="users">
<% for user in User.all %>
<label class="activity">
<%= check_box_tag "activity[user_ids][]", user.id %>
<%= user.name %>
</label>
<% end %>
</div>


<div class="pictograms">

<% for p in Pictogram.all %>
<% #f.fields_for :pictograms do |x| %>
<%= p %>
<% #end %>
<% end %>
</div>

<div class="actions">
<%= f.submit %>
</div>
<% end %>

schema.rb

ActiveRecord::Schema.define(version: 20130911095113) do

# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"

create_table "activities", force: true do |t|
t.string "title"
t.date "start_date"
t.date "end_date"
t.integer "pictogram_id"
t.datetime "created_at"
t.datetime "updated_at"
end

add_index "activities", ["pictogram_id"], name: "index_activities_on_pictogram_id", using: :btree

create_table "activities_users", id: false, force: true do |t|
t.integer "activity_id"
t.integer "user_id"
end

add_index "activities_users", ["activity_id"], name: "index_activities_users_on_activity_id", using: :btree
add_index "activities_users", ["user_id"], name: "index_activities_users_on_user_id", using: :btree

create_table "pictograms", force: true do |t|
t.string "title"
t.string "url"
t.datetime "created_at"
t.datetime "updated_at"
end

create_table "users", force: true do |t|
t.string "name"
t.text "avatar"
t.date "birthdate"
t.datetime "created_at"
t.datetime "updated_at"
end

end

事件.rb

class Activity < ActiveRecord::Base
belongs_to :pictogram
has_and_belongs_to_many :users

accepts_nested_attributes_for :pictogram, allow_destroy: false
accepts_nested_attributes_for :users, allow_destroy: false
end

用户.rb

class User < ActiveRecord::Base
has_and_belongs_to_many :activities

validates_presence_of :name, :on => :create
validates_presence_of :birthdate, :on => :create

accepts_nested_attributes_for :activities, allow_destroy: false
end

还有来 self 的事件 Controller 的事件参数

def activity_params
params.require(:activity).permit(:title,
:start_date,
:end_date,
:users,
:pictogram)
end

最佳答案

像这样尝试:

class Activity < ActiveRecord::Base
belongs_to :pictogram
has_and_belongs_to_many :users

accepts_nested_attributes_for :pictogram, allow_destroy: false

def user_ids=(values)
self.users << User.find(values)
end
end

#controller

def activity_params
params.require(:activity).permit(:title,
:start_date,
:end_date,
{:user_ids =>[]},
:pictogram)
end

关于ruby-on-rails - 无法让 'has_and_belongs_to_many' 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18738180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com