在我看到的每个创建或更新操作示例中,他们都有类似的内容。
[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
如何显示控制器的动作。任何人都能解释一下吗?
答案 0 :(得分:3)
让我们从redirect_to
文档开始。
redirect_to post_url(@post)
用于重定向到使用其中一个Rails路由助手生成的特定URL。在你的情况下,这意味着你可以写
redirect_to user_url(@user)
但是,redirect_to
也接受单个模型实例。 Behind the scenes,redirect_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更加面向对象的另一种方法。