如何在link_to helper中忽略model的type列

时间:2016-03-04 03:13:45

标签: ruby-on-rails

假设我有PetCat 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使用父类作为模型。

1 个答案:

答案 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命令调用的路径知道要创建哪种宠物。