连接视图和模型/ Ruby-RoR
我是RoR的初学者。我必须开发一个轮询发生器,所以我用'rails generate scaffold'命令创建了三个模型应用'Formulaire''Question'和'Reponse'。我无法创建我的表单来在同一视图中生成我的投票,我想我已经在我的公式/ _form中提交了我的问题/ _form,但它不起作用。我试图在我的form_for(@formulaire)中创建一个form_for(@formulaire)我的视图formulaires/_form连接视图和模型/ Ruby-RoR
那么,如何连接我的三个模型并在同一视图中创建三个实体?
谢谢
在Ruby on Rails的,提供给视图(@something
)类变量,在控制器的动作设定。所以说你有一个UsersController,有一个index
行动。这通常会定义@users = User.all
。
在视图app/views/users/index.html.erb
中,您可以管理@users
,或者在表格中显示这些信息。
你的问题听起来像是脚手架为每个脚手架都创建了一个控制器,但是你想在同一视图中管理它们吗?在这里你必须编辑控制器,通过初始化模型来找到这些模型。 @question = Question.new
和form_for(@question)
。
我建议您阅读http://edgeguides.rubyonrails.org/getting_started.html第5章和第6章,以便对模型,表格和控制器有基本的了解。
编辑:
根据您在下面的回答,我认为你应该使用.questions.build
而不是。新。由于.questions
将返回一个ActiveRecord::Collection
据我记得,你会打电话给new
这个。通过has_many关系创建新记录的适当方法是.build
。请参阅以下链接:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
谢谢你的帮助,它帮助了我,但我还没有找到解决方案 – user9007028
谢谢Frederik! – user9007028
在这种情况下,你可以不喜欢创建主模式叫Formulaire,那么问题的模型,并回答模型和评论模型...
一个Formulaire将有许多问题(has_many)和一个问题会有一个或多个答案(has_one或has_many)。
通过Rails,控制器,视图和模型需要一起操作。这意味着如果你想添加(或编辑)一个问题,那么简单的事情就是像apps/views/questions/_edit.html.erb。
你也可以做嵌套参数。
def formulaire_params
params.require(:formulaire).permit(
: name,
: subject,
: instructions,
{ questions: [:id, :description, :_destroy] },
...
)
end
为了显示“formulaire”,通过你已经添加了mas_many和HAS_ONE关系(以及适当的范围界定和授权),你会很容易能够像做
<% @formulaire.questions.each do |question| %>
<span class=""><%= question.description %></span>
<% question.answers.each do |answer| %>
<span class=""><%= answer.owner.name %></span>
<span class=""><%= answer.description %></span>
<% end %>
...
<% end %>
谢谢米歇尔的回答。我做了你解释的,但我有一个错误:在我的应用程序/ views/questions/_form.html.erb类 问题#新 未定义的方法问题为零:NilClass – user9007028
你可以发布你的控制器公式和问题? –
我的 'formulaire控制器'
def new
@formulaire = current_user.formulaires.new
end
我的观点formulaire/_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])做尝试| F | %> 但我有一个NoMethodError的问题#新
Ty。
我更新了我的答案以适应新的信息。这应该工作。 –
请详细说明_“它不工作”_。你尝试了什么?你有什么问题?有没有错误信息?请显示你的代码。 – spickermann
问题是我必须创建带有问题和解答的表单。我能够在我的数据库和问题中创建表单,但我不知道如何将每个表单连接到几个问题。例如我用我的新方法在我的配方控制器中将用户连接到我的Formulaire控制器中的“Form @ Formulaire = current_user.formulaires.new”。 – user9007028