连接视图和模型/ Ruby-RoR

时间:2017-11-25 11:53:41

标签: ruby-on-rails ruby

我是RoR的初学者。我必须开发一个轮询生成器,所以我创建了一个三个模型应用程序' Formulaire' '问题'并且'回应'用铁轨生成脚手架'命令。我无法在同一视图中创建我的表单以生成我的投票,我想我可以在我的公式/ _form中渲染我的问题/ _form但它不起作用。我试着在我的form_for(@ formulaire)中制作一个form_for(问题),在我的视图中,formulaires / _form

那么如何连接我的三个模型并在同一个视图中创建我的三个实体呢?

谢谢

3 个答案:

答案 0 :(得分:0)

在Ruby on Rails中,视图(@something)可用的类变量在controllers动作中设置。所以说你有一个具有index动作的UsersController。这通常会定义@users = User.all

在视图app/views/users/index.html.erb中,您可以管理@users,或在表格或其他内容中显示这些内容。

你的问题听起来是脚手架为每个人创建了一个控制器,但是你想在同一个视图中管理它们吗?在这里,您必须通过初始化模型来编辑Controller,以便找到这些模型。 @question = Question.newform_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