我有一个评论脚手架和电影脚手架。
用户可以在此路径评论电影/ movies / the-social-network / comments / new
我的问题是评论使用movie_id工作并与电影联系。
所以我要问的是如何将社交网络作为movie_id传递?
PS:我正在使用Friendly Id 4
答案 0 :(得分:1)
首先,由于您希望通过像Movie
这样的“slug”查找the-social-network
,因此您需要扩展FriendlyId
并告诉它将id
参数化为属性叫slug
。通过传递:slugged
执行此操作,如下所示:
# app/models/movie.rb
class Movie < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
end
然后,创建一个迁移以存储slug
对象的Movie
:
# in console
rails g migration add_slug_to_movies slug:string
修改迁移文件以添加slug
作为索引:
# change migration file
class AddSlugToMovies < ActiveRecord::Migration
def change
add_column :movies, :slug, :string
add_index :movies, :slug
end
end
最后,您需要为数据库中的所有现有影片创建一个slug。您可以通过逐个保存每部电影来完成此操作:
# in Rails console
Movie.find_each(&:save)
完成此操作后,您应该可以Movie
查找与/movies/the-social-network/comments/new
类似的内容。
查看this Railscast以获取更多详细信息和示例,包括确保在数据库中更改标题时正确更新对象的slug。
答案 1 :(得分:0)
您可以使用to_param。例如,如果movie_name
是“社交网络”,则可以使用:
class Movie < ActiveRecord::Base
def to_param
movie_name
end
end