我从Ruby on Rails开始,然后制作一个应用程序来接受Facebook用户的喜欢并将其转换为产品,创建个性化的礼品列表。
嗯,我有三个型号:用户,和产品一样。因此他们是:
class Like < ActiveRecord::Base
belongs_to :user
has_one :product
attr_accessible :category, :created_time, :name
end
class Product < ActiveRecord::Base
belongs_to :user
has_one :like
attr_accessible :image_url, :price_max, :price_min, :product_name,
:url
end
class User < ActiveRecord::Base
has_many :likes, dependent: :destroy
has_many :products, through: :likes, dependent: :destroy
attr_accessible :email, :password, :password_confirmation, :remember_me,:first_name, :last_name, :gender, :facebook_username, :provider, :uid
end
我也在使用两颗宝石来帮助我抓住喜欢并将它们变成产品。我有两种方法用于&#39; rails console&#39;为此:
#Facebook Client
client = FBGraph::Client.new(
client_id: 'client_id',
secret_id: 'secret_id',
token: 'token'
)
#Getting and Recording Likes
like = client.selection.me.likes.info!.data.data
like.sort_by{ |like| like.created_time.to_i }.reverse.each do |like|
case like.category
when 'Musician/band' then category = 'band'
...
else next
Like.create(category: category, created_time: like.created_time, name: like.name, user_id: current_user.id)
end
#Product API Client
buscape = Buscape.new(
app_id: 'app_id',
sandbox: true
)
#Getting product through likes, and recording
def find_for_products
likes.each do |like|
case like.category
when 'band' then
product = @buscape.products.where(keyword: URI.encode(like.name), categoryId: 2921, results: 1)['product']
...
else next
end
Product.create(
image_url:product['thumbnail']['url'],
price_max:product['priceMax'],
price_min:product['priceMin'],
product_name:product['productName'],
url:product['links']['link'][0]['url']
)
end
end
使用rails控制台,我可以使用Like.new和Product.new手动注册产品和喜欢,并将其分配给访问和使用&#39; user.products&#39;的用户,但我不知道如何在我的视图中实施和以及在用户点击按钮时捕获current_user并生成产品 < strong>&#39;为我找到产品&#39;
任何人都可以帮助我吗?
答案 0 :(得分:0)
如果您正在使用资源,则可以在User
文件中的routes.rb
上定义新操作,如下所示:
resources :user do
member do
post 'find_products'
end
end
然后在控制器类中实现此操作。
一种选择是将用于查询FB和查找产品的代码放入self
模型中的Product
方法,例如Product.find_and_create_products(user)
。或者在rails应用程序的lib
目录中的新文件中的单独模块中。然后从控制器中调用它。
如果此操作需要很长时间,您可以稍后添加一些附加代码以将其作为延迟作业运行,例如delayed_job。