我正在试图弄清楚如何执行一个最喜欢的图片" Rails应用程序中的方法,我很新,来自JS / Meteor背景。
关键是我有一个User,FavPic,Pic类:
class User < ActiveRecord::Base
#some user oauth stuff would be here
has_many :fav_pics
has_many :pics_favorited,
class_name: 'Pic',
through: :fav_pics
end
class FavPic < ActiveRecord::Base
belongs_to :user
belongs_to :pic
end
class Pic < ActiveRecord::Base
has_many :fav_pics
has_many :fav_users,
class_name: 'User',
through: :fav_pics
end
这是我的模板:
<% if current_user %>
<%= form_tag(root_path, :method => "get") do %>
<p>
<%= text_field_tag :username, params[:username] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
<ul>
<% @mentions.each do |mention| %>
<li>
<%= mention.text %>
<div class="row">
<% mention.media.each do |media| %>
<div class="col-xs-3">
<%=image_tag(media.media_url, class:"img-responsive")%>
<a href="#" class="fav-img"><i class="fa fa-star fa-2x"></i></a>
</div>
<% end %>
</div>
</li>
<% end %>
</ul>
<% else %>
<p>
Sign in to be able to use the app.
</p>
<% end %>
current_user
是通过Twitter登录的用户,而@mentions
是一个推文列表,其中包含以所述形式输入的用户名。 media.media_url
是与该推文相关联的图片网址。
我正在尝试将该链接(或其在Rails中完成的任何方式)添加到数据库中,以便将所有图像列在单独的URL中。
答案 0 :(得分:0)
您可以选择:将<a href="#">
更改为表单,或让您的操作链接包含url编码的url作为参数。无论哪种方式,您仍然可以使用AJAX来调用对服务器的调用。
您的服务器将在控制器上执行操作,该控制器接受相应的调用以将某些内容标记为收藏。由于您没有列出Controller
代码,因此请将其称为PicController
我还假设您的Pic
班级有url
它的财产。
我强烈推荐这本入门书:http://guides.rubyonrails.org/association_basics.html和非常基本的http://guides.rubyonrails.org/getting_started.html,其中介绍了如何执行操作链接和表单。
class PicController < ApplicationController
def favorite
pic = Pic.find(params[:url])
favorite = FavPic.new
favorite.pic = pic
favorite.user = current_user # however you get at this...
favorite.save
pic.fav_users.add(favorite)
pic.save
current_user.fav_pics.add(favorite)
current_user.save
end
end
以上代码介绍了如何创建新的FavPic实例并进行适当保存。
答案 1 :(得分:0)
把它放在一起
你需要
pics_controler
所以在你的config/routes.rb
中,定义一个命名的路由添加
put 'pics/:url/avourite' => 'pics#favourite', as: 'add_favourite'
并在您的模板中将链接更改为
<%= link_to add_favourite_url(url: media.media_url), class: 'fav-img', method: :put do %>
<i class="fa fa-star fa-2x"></i>
<% end %>
然后在控制器中:
class PicController < ApplicationController
def favorite
if current_user.present?
pic = Pic.find(params[:url])
FavPic.create pic: pic, user: current_user
# user and pic automaically have this `FavPic` assigned
end
end
end