【发布时间】:2014-05-12 02:03:28
【问题描述】:
我对 Rails 很陌生,如果措辞不佳,我很抱歉……对于一门课程,我正在创建一个应用程序,让您可以添加(发布)名为 Planets 和 Moons 的类的新实例。 Moon应该是Planet的孩子。现在我可以使用三个路由请求在单独的数据库表中创建两者:
get "planets" => "planets#index"
get "planets/new" => "planets#new"
post "/planets" => "planets#create"
(这将创建一个表单页面来注册新的行星。替换“moons”,moon 类的工作方式相同,包括从它自己的表单页面创建。)
我有第四条路线用于行星显示页面
get "planets/:id" => "planets#show"
在这个行星 id 显示页面上,我想创建一个“添加月球”表单,该表单采用行星的参数 ID,让用户输入月球名称,并发送发布请求以创建新实例。
我认为我对表单和路由的了解不够。
我的新月形式是
<%= form_for @moon, url: "/planets/:id" do |f| %>
<p><strong>New Moon Name:</strong></p>
<p>Name: <%= f.text_field :name %></p>
<% Planet.find(params[:id]: :planet_id %>
<p><%= f.submit "Create!" %></p>
<% end %>
我拥有的三个“月球”路线: 1)得到“月亮”=>“月亮#index” 2)获取“moons/new”=>“moons#new”(转到我用来测试的表格,我不知道我是否需要这个) 3)发布“/planets/:id”=>“moons#create”(我认为问题出在哪里)
我想我可能需要使用插值将行星 ID 从参数中获取到月球发布表格中,所以帮助很大,但我更关心的是越过这条线:
<%= form_for @moon, url: "/planets/:id" do |f| %>
我收到错误:“表单中的第一个参数不能包含 nil 或为空”
这是我在卫星控制器中定义的...
def new
@moon = Moon.new
end
def create
moon_attributes = params[:moon]
Moon.create({
name: moon_attributes[:name],
planet_id: moon_attributes[:planet_id]
})
end
我希望这个问题有意义。提前致谢!
【问题讨论】:
-
修复了 8 小时内我无法回答自己的问题...似乎用直接调用新实例替换表单标记中的 url 会将新实例保存到数据库中..
月球名称:
"#{planet.id}".to_i %>
路由是 get "moons" => "moons#index" get "moons/new" => "moons#new" post "/moons" => "moons#create"
标签: ruby-on-rails forms