我正在尝试使用红宝石在铁轨上为网球教练建立一个网站。我对此完全陌生,我正在努力学习一些术语。该网站有一个登录系统,用户可以登录,然后注册网球教练创建的不同活动。因此,基本上用户可以参加许多活动,并且活动可以有许多用户参加。我在用户表和事件表之间建立了has_and_belongs_to_many
关系,代码如下:
这是我的迁移:
class CreateEventsUsers < ActiveRecord::Migration
def change
create_table :events_users, :id => false do |t|
t.integer :event_id
t.integer :user_id
end
add_index :events_users, :event_id
add_index :events_users, :user_id
add_index :events_users, [:event_id, :user_id]
end
def self.down
drop_table :events_users
end
end
以下是我的模特:
class User < ActiveRecord::Base
has_and_belongs_to_many :events
end
class Event < ActiveRecord::Base
has_and_belongs_to_many :users
end
这是我的活动表格:
<li>
<%= link_to event.title, event %>
| <%= link_to "delete", event, method: :delete %>
| *insert sign up here*
</li>
基本上我的问题是,我如何制作一个表格和控制器,让登录用户,注册数据库中的一个事件?我已经坚持了几天。任何帮助将不胜感激。
答案 0 :(得分:0)
如果您还没有发现它,那么如果您从Ryan Bates结帐轨道广播,那么您将获得真正的待遇。这是一个关于在具有HABTM关联的表单中使用复选框的教程 - 实际上他建议,你应该考虑它,通过关系而不是HABTM转向has_many。
无论如何,它至少应该让您了解如何使其在您的应用中运行。 http://railscasts.com/episodes/17-habtm-checkboxes-revised。那一集可能需要一个会员资格,然而,每月9美元的bux对于你获得的内容是完全合理的。
答案 1 :(得分:0)
我建议使用has_many而不是使用has_and_belongs_to来解决可伸缩性问题,这是一种建议的做法。根据您的要求,我做了类似的事情,但用户跟随其他用户并尝试采用其中一些用于您的要求。
class Event < ActiveRecord::Base
has_many : Relationship
has_many : users, :through => :Relationships
end
class User < ActiveRecord::Base
has_many :Relationship
has_many :events, :through => :Relationships
//define other methods//
def follow!(event_id)
relationships.create!(event_id: event.id)
end
end
class Relationship < ActiveRecord::Base
attr_accessible :event_id
belongs_to :events
belongs_to :users
end
您需要像这样创建关系迁移
class CreateRelationships < ActiveRecord::Migration
def change
create_table :relationships do |t|
t.integer :user_id
t.integer :event_id
t.timestamps
end
add_index :relationships, :user_id
add_index :relationships, :event_id
add_index :relationships, [:user_id, :event_id], unique: true
end
end
您可以尝试在事件页面视图上添加一个按钮。
<%= form_for(current_user.relationships.build(evnt_id: @user.id)) do |f| %>
<div><%= f.hidden_field :event_id %></div>
<%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>
关系控制器可以是这样的。
class RelationshipsController < ApplicationController
def create
@user = User.find(params[:relationship][:event_id])
current_user.follow!(@user)
respond_to do |format|
format.html { redirect_to @user }
end
end
end
本教程对我开发用户跟随其他用户的应用程序非常有帮助。希望它也会对你有所帮助。祝好运 !! http://ruby.railstutorial.org/chapters/following-users#top