我有一个名为“问题”的模型对象,我希望能够使用URL / problems / PROBLEM_NAME调用其“show”操作。
我认为解决这个问题的方法是更改它,以便primary_key不再是默认的整数id,而是希望它是一串字母。
我试过rails g model problem problem_name:primary_key problem_text:text
但是我得到了关于拥有多个主键的明显错误。
有什么想法吗?
答案 0 :(得分:1)
我猜您的路线中有:
resources :problems
在使用resources :problems
的行之前,在您的routes.rb文件中添加此
match "problems/:problem_name" => "problems#show"
添加新的节目路线后,在您的问题控制器中,在show动作中,而不是
@problem = Problem.find(params[:id])
你现在使用
@problem = Problem.find_by_name(params[:problem_name])
这样做,您不必修改数据库
答案 1 :(得分:0)
在生成的迁移中,更改此行:
create_table :problems do |t|
到此:
create_table :problems, :id => false do |t|
但我建议您使用slug作为额外的列而不是文本主键...