ruby-on-rails - 如何让用户订阅事件

标签 ruby-on-rails

我有一个用户和一个事件模型

当用户位于事件页面时,我希望他可以单击一个按钮来表示“算我一个”。然后我就可以获得该事件的所有参与者的名单。

我应该写什么样的表格?我需要在两者之间再换一张 table 吗?

<%= form_tag concert_path(@concert) do %>
 <%= hidden_field_tag :user_id, current_user.id %>
 <%= submit_tag "count me in", class:  "btn btn-primary
<% end %>

编辑

我添加了建议的代码,但我面临着没有路由匹配 POST 寄存器的情况 所以我添加了 method: :put

<%= form_tag register_concert_path(@concert), method: :put do %>
  <%= hidden_field_tag :user_id, current_user.id %>
  <%= submit_tag "count me in", class:  "btn btn-primary" %>
<% end %>

现在我可以将自己添加到音乐会中,但发生了一些奇怪的事情,它尝试下载文件注册并显示失败 - 找不到文件

另外我应该如何从音乐会中删除用户? 我应该采用取消订阅的方法并将当前用户从列表中删除吗?

def unsubscribe
  concert = Concert.find(params[:id])
  user = User.find(params[:user_id])
  concert.users.delete(user)
end

最佳答案

您正在寻找的是:has_and_belongs_to_many 您需要定义音乐会和用户之间的链接。

class Concert 
 has_and_belongs_to_many :users
end

class User
 has_and_belongs_to_many :concerts
end

然后在 Controller 中,请使用其他操作(注册),您必须将用户添加到当前音乐会。

def register
  concert = Concert.find(params[id])
  user = User.find(params[user_id])
  concert.users << user # adding the user 
  concert.save
end

参见 association reference

routes.rb

resources :concerts do
  member do
    put 'register'
  end
end

和 View

<%= form_tag register_concert_path(@concert) do %>
 <%= hidden_field_tag :user_id, current_user.id %>
 <%= submit_tag "count me in", class:  "btn btn-primary
<% end %>

关于ruby-on-rails - 如何让用户订阅事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55046282/

相关文章:

javascript - 如何动态创建包含类属性的列表

ruby-on-rails - 如何从其他 Controller 调用 ApplicationController 中的方法?

ruby-on-rails - 带有Ransack的Tire Gem用于Elasticsearch

ruby-on-rails - Rails 4 x postgresql:ActiveRecord::InvalidForeignKey

ruby-on-rails - ActiveRecord destroy_all

ruby-on-rails - 检查记录是否刚刚在 rails 中被破坏

ruby-on-rails - Docker 作为有效的 Rails 开发环境

ruby-on-rails - Heroku ruby​​ 版本不匹配

ruby-on-rails - rails activesupport 通知 - 错误的数据库运行时值

javascript - rails : Can't load two Jquery scripts in my page