在Rails应用程序中收藏图片

时间:2015-04-24 18:18:04

标签: ruby-on-rails

我正在试图弄清楚如何执行一个最喜欢的图片" 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中。

2 个答案:

答案 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)

把它放在一起

  • 有一个current_user,希望将图片添加到她/他的收藏夹
  • 图片由网址标识,网址也是模板中的media_url

你需要

  • 将图片添加为收藏夹的操作,即pics_controler
  • 此操作的路由,因为它是数据更改操作,它应该是POST路由

所以在你的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