@user如何在rails中显示操作

时间:2016-01-01 15:02:27

标签: ruby-on-rails ruby

在我看到的每个创建或更新操作示例中,他们都有类似的内容。

    [System.ComponentModel.DataAnnotations.Schema.Table("Skills")]
    public class Skill
    {
        [key]
        public int ID { get; set; }
        public string SkillName { get; set; }

        public virtual List<Teacher> Teachers { get; set; }
    }

   [System.ComponentModel.DataAnnotations.Schema.Table("Teachers")]
    public class Teacher
    {
        [key]
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Campus { get; set; }

        public virtual List<Skill> Skills { get; set; }
    }

这里def create @user = User.new(params) if @user.save redirect_to @user else render 'new' end end 如何显示控制器的动作。任何人都能解释一下吗?

3 个答案:

答案 0 :(得分:3)

让我们从redirect_to文档开始。

redirect_to post_url(@post)

用于重定向到使用其中一个Rails路由助手生成的特定URL。在你的情况下,这意味着你可以写

redirect_to user_url(@user)

但是,redirect_to也接受单个模型实例。 Behind the scenesredirect_to依赖url_for在输入不是对象时从输入生成URL。

url_for,当您默认传递模型实例时,会计算相应的GET操作以查看模型。

总之,以下代码:

redirect_to @post

相当于

redirect_to post_url(@post)

但是,我个人更喜欢显式版本。即使它有点长,我也注意到从长远来看它往往会产生更多可维护的代码。编写完整路径将允许您在需要调试或重命名路径时轻松搜索代码库。

答案 1 :(得分:2)

全部在documentation

  

记录 - 将通过调用带有选项的url_for生成URL,该选项将引用该记录的命名URL。

因此,url_for将在您的@user上调用,这将生成重定向的网址。 (/users/1234或其他)

顺便说一句,这只是重定向的众多方法之一。

答案 2 :(得分:0)

在Ruby(支持Rails的语言)中,您设置@instance_variables来存储该请求的数据。虽然您可以在变量中存储多种类型的数据,但Rails通常会为它们分配@model个对象...

@user = User.find 1
#-> @user = <User id: "1", name: "john" .... >

这意味着无论何时使用帮助程序(例如redirect_to,甚至是path_helper),您实际上都可以将对象传递给它和Rails将提取所需的数据。

例如......

user_path(@user)
edit_user_path(@user)

在路径的实例中,助手提取对象的id; redirect_to推断将请求路由到该用户的show路径的功能。

传递redirect_to接受一个对象,为该对象调用 show 动作。

这一点很重要的原因是要明白Ruby(&amp; by Rails)是object orientated

面向对象的编程意味着您应该处理对象(而不是变量)。

对于Rails,每个模型都应该是一个对象。每次加载模型或创建它的新实例时,都应该处理对象而不是数据。

因此,允许您将@objects传递给redirect_to之类的方法只是使Rails更加面向对象的另一种方法。