现在我正在完成我的小型学习项目,但我正在做一件事。该项目的功能包括:register
,login
,logout
作者; 事件的creating
,editing
,removing
;参加,不参加活动。
我想要实现的最后一件事是,能够看到谁参加某个活动。参加/不参加的功能已经完成(制作一个表格,参与活动和作者)。
唯一缺少的是显示世界卫生组织正在参加不同的活动(这意味着从我的show.html.erb中events_id等于的eventattendances表中显示Authors_key)。当我尝试这样做时,我总是从eventattendacnes_controller的SHOW方法中获取一个空对象。
在这里添加所有与此相关的代码(如果遗漏了任何内容,请告诉我,我会在此处添加)。谢谢!
Versions: Rails(4.0.0), Ruby(2.3.3p222)
eventattendances_controller
class EventattendancesController < ApplicationController
before_action only: [:show, :edit, :update, :destroy]
before_filter :require_login
def new
if Eventattendance.exists?(events_id: params[:event_id].to_i, authors_id: current_user.id)
redirect_to event_path(params[:event_id])
else
@eventattendance = Eventattendance.new(events_id: params[:event_id].to_i, authors_id: current_user.id)
@eventattendance.save
redirect_to event_path(params[:event_id])
end
end
def destroy
if Eventattendance.exists?(events_id: params[:event_id].to_i, authors_id: current_user.id)
Eventattendance.where(events_id: params[:event_id].to_i, authors_id: current_user.id).first.destroy
redirect_to event_path(params[:event_id])
else
redirect_to event_path(params[:event_id])
end
end
def show
@eventattendances = Eventattendance.find(events_id= params[:event_id].to_i)
end
private
def author_params
params.require(:author).permit(:username, :email, :password,:password_confirmation)
end
def event_params
params.require(:event).permit(:title, :body)
end
end
eventattendances.rb (型号)
class Eventattendance < ActiveRecord::Base
belongs_to :author
belongs_to :event
end
的routes.rb
Events::Application.routes.draw do
root to: 'events#index'
resources :events
resources :authors
resources :author_sessions, only: [ :new, :create, :destroy ]
resources :eventattendances, only: [:destroy, :new, :show]
get 'login' => 'author_sessions#new'
get 'logout' => 'author_sessions#destroy'
end
views / events / show.html.erb (这里我想设置来自eventattendances的show函数,以显示参加活动的作者的authors_id)
`<h1><%= @event.title %></h1>
<p><%= @event.body %></p>
<%= @at_list.blank? %>
<%= @at_list_att.blank? %>
<%=sql = "Select * from eventattendances"
at_list = ActiveRecord::Base.connection.execute(sql) %>
<% @event.eventattendances.map do |eventattendance| %>
<tr>
<td><%= eventattendance.author_id %></td>
</tr>
<% end %>
<%= link_to "<< Back to Event List", events_path %>
<p> </p>
<br>
<% if logged_in? %>
<%= link_to "edit", edit_event_path(@event) %>
<%= link_to "delete", event_path(@event), method: :delete, data: { confirm: "Are you sure?" } %>
<% end %>
<%= link_to "Cancel atendance", eventattendance_path(event_id: @event.id), method: :delete, class: "btn btn-primary" %>
<%= link_to "Attend", new_eventattendance_path(event_id: @event.id), class: "btn btn-success"%>
`
events_controller
class EventsController < ApplicationController
include EventsHelper
before_filter :require_login, except: [:index]
def index
@events = Event.all
end
def show
@event = Event.find(params[:id])
end
def new
@event = Event.new
end
def create
@event = Event.new(event_params)
@event.save
redirect_to event_path(@event)
end
def destroy
@event = Event.find(params[:id])
@event.destroy
redirect_to events_path
end
def edit
@event = Event.find(params[:id])
end
def update
@event = Event.find(params[:id])
@event.update(event_params)
redirect_to event_path(@event)
end
private
def event_params
params.require(:event).permit(:title, :body)
end
end
author.rb
`class Author < ActiveRecord::Base
authenticates_with_sorcery!
validates_confirmation_of :password, message: "should match confirmation", if: :password
has_and_belongs_to_many :events
end`
event.rb
class Event < ApplicationRecord
has_and_belongs_to_many :authors
end
答案 0 :(得分:1)
首先,如果您正在渲染views/events/show
,那么
<% @event.eventattendances.map do |eventattendance| %>
<tr>
<td><%= eventattendance.author_id %></td>
</tr>
<% end %>
获取author_id。
但是想得更好,也许你有关系问题,你需要一个 has and belongs to many association
答案 1 :(得分:0)
解决方案是将其放入events_controller.rb
的 show 方法(而不是eventattendances_controller
)
@eventattendances = Eventattendance.find_by(events_id: params[:id])
+
更改查找的参数:
从(events_id= params[:event_id])
到(events_id: params[:id])
(也许它将来会帮助某人)