假设我有Pet
和Cat
s。猫存储在pets
表中,type
列中的值为'Cat'。
假设我创建了一个这样的链接:
link_to 'My Pet', Pet.find(1)
这将按预期使用pet_path
生成链接。
但是,让我们说我创建了一个这样的链接:
link_to 'My Pet', Cat.find(1)
这会生成一个使用'cat_path'的链接,这很聪明,但不是我想要的,因为我只需要/需要一个PetController。
显然,我可以在link_to中使用pet_path(Cat.find(1))
,但我想知道是否有更强大的解决方案。如果我有狗,鸟等怎么办?我不想记得每次都明确使用pet_path
。
如何确保第二个链接会创建与pet_path
前进的链接?是否有Cat模型或宠物模型上的设置或者我可以在routes.rb中设置确保这个?
-edit -
对于我正在努力实现的目标存在一些困惑。我只想知道如何确保使用Cat对象调用link_to将解析为pet_path而不是cat_path。我不是在寻找一种方法来改变我的表格设置方式。在理想的情况下,我不必为不同的宠物类型创建一堆控制器。我想知道在确定url帮助器时是否有一种简单,优雅的方法告诉Rails使用父类作为模型。
答案 0 :(得分:0)
您可以手动创建自定义路线
<?php
$path="test";
$i = 1;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
$oldname = $path.'/'.$file;
$path_info = pathinfo($oldname);
rename($oldname, "tmp".'/'.($i).'.'.'jpg');
echo "Old name = <b>".$oldname."</b></br>";
echo "New name = <b>"."tmp".'/'.($i).'.'.'jpg'."</b></br></br>";
$i++;
}
}
closedir($handle);
}
$path="tmp";
$i = 1;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
$oldname = $path.'/'.$file;
$path_info = pathinfo($oldname);
rename($oldname, "test".'/'.($i).'.'.'jpg');
echo "Old name = <b>".$oldname."</b></br>";
echo "New name = <b>".$path.'/'.($i).'.'.'jpg'."</b></br></br>";
$i++;
}
}
closedir($handle);
}
?>
或使用资源
get 'cats/:id' => 'pets#show'
put 'cats/:id' => 'pets#update'
delete 'cats/:id' => 'pets#destroy'
# etc etc
...
稍微超出了您的问题范围,但是创建操作可以测试网址resources :cats, controller: 'pet'
,并根据使用request.original_url
命令调用的路径知道要创建哪种宠物。