Ruby on rails 为什么要在实施时采取错误的行动;“收藏”;,模仿迈克尔·哈特尔';Rails教程中的跟随者/跟随者 我解决了这个问题。有关详细信息,请参阅我发布的答案。基本上,我有一个表格中的表格,两者都有一个后期动作。我去掉了外形。
更新3:这几乎可以正常工作,但现在我的FavoritesController创建方法出现了一个奇怪的错误: 错误的参数类型模块(应为类) 以下是“添加到收藏夹”按钮:Ruby on rails 为什么要在实施时采取错误的行动;“收藏”;,模仿迈克尔·哈特尔';Rails教程中的跟随者/跟随者 我解决了这个问题。有关详细信息,请参阅我发布的答案。基本上,我有一个表格中的表格,两者都有一个后期动作。我去掉了外形。,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,更新3:这几乎可以正常工作,但现在我的FavoritesController创建方法出现了一个奇怪的错误: 错误的参数类型模块(应为类) 以下是“添加到收藏夹”按钮: <%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %> <div class="hidden"><%= f.hidden_field :followed_event_id %>
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
下面是用户模型!()方法
更新2:查看源代码时,包含“添加到收藏夹”按钮的表单包含在搜索结果项的表单中。因此,用户搜索事件,获取搜索结果,并将每个项目呈现为一个表单,另一个表单用于“添加到收藏夹”按钮 但这种外部形式有一个方法=“post”,这似乎就是问题所在 创建该外部表单是因为我使用了一个表单,所以我删除了该表单,现在没有外部表单。但是在呈现“添加到收藏夹”按钮部分时保存收藏夹,而不是在单击按钮时保存收藏夹。这就是我现在需要解决的问题。如此接近
更新:我终于可以添加收藏夹了,但不幸的是,当单击“添加到收藏夹”按钮时,除了保存收藏夹记录外,还调用了用户事件更新操作。这在用户取消跟踪事件时最为重要,因为这会删除该事件,而不是他们的事件 以下是FavoritesController中的收藏夹创建方法:
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
end
以下是用户模型中的follow()方法:
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
以下是带有“添加到收藏夹”按钮的部分内容:
很多代码,我希望你能理解我的问题并能提供帮助。我的应用程序已经完成了70%,到目前为止我一直很喜欢Rails,但这个问题让我感到困惑。用户模型中有一个错误。应该是:
class User < ActiveRecord::Base
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
# ...
end
class用户
试试这个,看看会发生什么。我不确定这是否能解决您的错误 用户模型中有错误。应该是:
class User < ActiveRecord::Base
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
# ...
end
class用户
试试这个,看看会发生什么。我不确定这是否能解决您的错误 解决了最后一个问题。我最喜欢的控件是从ActionController继承的,这是一个输入错误,它应该是ApplicationController。这不是核心问题。核心问题是我在一个表单中有一个表单,在生成的HTML中,两个表单都有一个post操作。因此,当点击“添加到收藏夹”按钮时,外部表单被提交。解决方法是将div从外部形式中移除 下面是我现在正在工作的“保存到收藏夹”实现的基本代码。只有我认为相关的代码。完整的代码太大 谢谢你的帮助 ------------迁移以创建收藏夹表------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
----------------喜爱的模型-----------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
--------------------用户事件模型----------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
--------------偏爱控制器-------------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
------------\u添加\u删除\u favorite.html.erb----------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
-------------_add_favorite.html.erb------------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
-------------\u删除\u favorite.html.erb----------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
--------------显示收藏夹的用户显示页面代码show.html.erb------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
你的最爱
你的最爱包括!
你没有最喜欢的活动
解决了最后一个问题。我最喜欢的控件是从ActionController继承的,这是一个输入错误,它应该是ApplicationController。这不是核心问题。核心问题是我在一个表单中有一个表单,在生成的HTML中,两个表单都有一个post操作。因此,当点击“添加到收藏夹”按钮时,外部表单被提交。解决方法是将div从外部形式中移除
下面是我现在正在工作的“保存到收藏夹”实现的基本代码。只有我认为相关的代码。完整的代码太大
谢谢你的帮助
------------迁移以创建收藏夹表------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
----------------喜爱的模型-----------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
--------------------用户事件模型----------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
--------------偏爱控制器-------------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
------------\u添加\u删除\u favorite.html.erb----------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
-------------_add_favorite.html.erb------------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
-------------\u删除\u favorite.html.erb----------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
--------------显示收藏夹的用户显示页面代码show.html.erb------------------
class CreateFavorites < ActiveRecord::Migration
def change
create_table :favorites do |t|
t.integer :following_user_id
t.integer :followed_event_id
t.timestamps
end
end
end
resources :users do
member do
get :following_users, :followed_events
end
end
resources :favorites, only: [:create, :destroy]
class Favorite < ActiveRecord::Base
attr_accessible :followed_event_id
belongs_to :following_user, class_name: "User"
belongs_to :followed_event, class_name: "UserEvent"
validates :following_user_id, presence: true
validates :followed_event_id, presence: true
end
has_many :user_events, dependent: :destroy
has_many :favorites, foreign_key: :following_user_id, dependent: :destroy
has_many :followed_events, through: :favorites, source: :followed_event
def following?(user_event)
favorites.find_by_followed_event_id(user_event.id)
end
def follow!(user_event)
favorites.create!(followed_event_id: user_event.id)
end
def unfollow!(user_event)
favorites.find_by_followed_event_id(user_event.id).destroy
end
belongs_to :user
has_many :favorites, foreign_key: :followed_event_id, dependent: :destroy
has_many :following_users, through: :favorites, source: :following_user
class FavoritesController < ApplicationController
before_filter :signed_in_user
def create
@user_event = UserEvent.find(params[:favorite][:followed_event_id])
current_user.follow!(@user_event)
redirect_to user_path(current_user)
end
def destroy
@user_event = Favorite.find(params[:id]).followed_event
current_user.unfollow!(@user_event)
redirect_to user_path(current_user)
end
end
def following_users
@user_event = UserEvent.find(params[:id])
@users = @user_event.following_users
end
def followed_events
@user = User.find(params[:id])
@user_events = @user.followed_events
end
<%= form_for(current_user.favorites.build(followed_event_id: user_event.id)) do |f| %>
<div class="hidden"><%= f.hidden_field :followed_event_id %></div>
<%= f.submit "Add to favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<%= form_for(current_user.favorites.find_by_followed_event_id(user_event),
html: { method: :delete }) do |f| %>
<%= f.submit "Remove from favorites", class: "info_inline_control info_button_small user_event_summary_item" %>
<% end %>
<h3 class="purple_text top_margin_thirty">Your Favorites</h3>
<div>
<% if @user.followed_events.any? %>
<h4 class="green_text info_inline_control">Your favorites include <%= pluralize(current_user.followed_events.count, "event") %> !</h4>
<div class="favorites">
<%= render @user.followed_events %>
</div>
<% else %>
<h4 class="green_text no_events">You have no favorite events</h4>
<%= link_to "Find an Event", new_search_path, class: "post_find_event_link" %>
<% end %>
</div>
你的最爱
你的最爱包括!
你没有最喜欢的活动
更改后,收藏夹仍未保存在数据库中,我的Flash消息显示“事件成功更新”,这似乎表明提交触发了错误的控制器/action.Log显示了用户事件的更新,而不是收藏夹的创建:Started PUT”/user\u events/1对于2013-06-29 08:36:07-0700由UserEventsController处理的127.0.0.1,我需要指定要提交的控制器/操作吗?尝试记录传递给表单\u的对象,以便。例如:这是一种奇怪的行为