我是RoR的初学者。我必须开发一个轮询生成器,所以我创建了一个三个模型应用程序' Formulaire' '问题'并且'回应'用铁轨生成脚手架'命令。我无法在同一视图中创建我的表单以生成我的投票,我想我可以在我的公式/ _form中渲染我的问题/ _form但它不起作用。我试着在我的form_for(@ formulaire)中制作一个form_for(问题),在我的视图中,formulaires / _form
那么如何连接我的三个模型并在同一个视图中创建我的三个实体呢?
谢谢
答案 0 :(得分:0)
在Ruby on Rails中,视图(@something
)可用的类变量在controllers动作中设置。所以说你有一个具有index
动作的UsersController。这通常会定义@users = User.all
。
在视图app/views/users/index.html.erb
中,您可以管理@users
,或在表格或其他内容中显示这些内容。
你的问题听起来是脚手架为每个人创建了一个控制器,但是你想在同一个视图中管理它们吗?在这里,您必须通过初始化模型来编辑Controller,以便找到这些模型。 @question = Question.new
和form_for(@question)
。
我建议你阅读http://edgeguides.rubyonrails.org/getting_started.html第5章和第6章,以便对模型,表格和控制器有一个基本的了解。
编辑:
根据您在下面的回答,我认为您应该使用.questions.build
而不是.new。据我所知,.questions
将返回ActiveRecord::Collection
,并且您将在此处致电new
。适合通过has_many关系构建新记录的是.build
它。请参阅以下链接:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
答案 1 :(得分:0)
在这种情况下,你可以做一些事情,比如创建一个名为Formulaire的主模型,然后是一个问题模型,一个答案模型和一个评论模型......
Formulaire会有很多问题(has_many),而一个问题会有一个或多个答案(has_one或has_many)。
通过Rails,控制器,视图和模型需要一起运行。这意味着如果你想添加(或编辑)一个问题,那么简单的事情就是app / views / questions / _edit.html.erb。
你也可以做嵌套参数。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//ASP.NET Web API Route Config
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Set Swagger as default start page
/*
routes.MapHttpRoute(
name: "swagger_root",
routeTemplate: "",
defaults: null,
constraints: null,
handler: new RedirectHandler((message => message.RequestUri.ToString()), "swagger"));
*/
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
为了显示“公式”,通过您添加的mas_many和has_one关系(以及正确的范围和授权),您可以轻松地执行类似
的操作def formulaire_params
params.require(:formulaire).permit(
: name,
: subject,
: instructions,
{ questions: [:id, :description, :_destroy] },
...
)
end
答案 2 :(得分:0)
我的'公式控制器'
def new
@formulaire = current_user.formulaires.new
end
我的观点是公式/ _form
<%= form_for (@formulaire), html: {:multipart => true} do |f| %>
我的问题控制器
def new
@question = current_user.questions.new
end
我的观点问题/ _form
<%= form_for(@question) do |f| %>
我试过'form_for([@ formulaire,@ formulaire.questions.new])do | f | %GT; 但我在问题#new
中有一个NoMethodError泰