Ruby on rails 如何将参数传递到数据库表
请你再帮我一次好吗?我想在制作新菜的时候过一天。我制作了菜肴控制器并查看表单。通过单击视图中的按钮,我想将@day.id的值写入属性day_id中的db表'courses' 注意:在“天”表中,属性的名称为id。 在课程表中,属性的名称是day\u id 课程包括: 型号: 碟形控制器:Ruby on rails 如何将参数传递到数据库表,ruby-on-rails,ruby,parameters,Ruby On Rails,Ruby,Parameters,请你再帮我一次好吗?我想在制作新菜的时候过一天。我制作了菜肴控制器并查看表单。通过单击视图中的按钮,我想将@day.id的值写入属性day_id中的db表'courses' 注意:在“天”表中,属性的名称为id。 在课程表中,属性的名称是day\u id 课程包括: 型号: 碟形控制器: @day = Day.find_by_id(params[:id]) 看法 日志 哦,奇怪的人。。。我发现了我的错误。在控制器中,我需要写: @day = Day.find_by(params[:id])
@day = Day.find_by_id(params[:id])
看法
日志
哦,奇怪的人。。。我发现了我的错误。在控制器中,我需要写:
@day = Day.find_by(params[:id])
而不是
@day = Day.find_by_id(params[:id])
您正在尝试查找@day by dish id
有必要将@day=day进行更改。在DishesController中通过\u idparams[:id]查找\u到
@day=day.findparams[:courses\u attributes][:day\u id]。问题在于您在Disks controller中的新操作中的这一行:
@day = Day.find_by_id(params[:id])
你正试图从params那里得到一个id。但我可以在您的日志中看到,您对Disapers/new发出了正常的get请求,url或参数中没有任何id:
GET "/dishes/new"
D想要实现什么目标,您需要在url或参数中传递一个day id,当您进入Districs/new时,或者您需要在控制器中找到不同的@day。当然,您也不能在表单中创建隐藏字段,而是让用户决定选择哪一天。或者,如果你不需要每门课程都有一天的时间,你可以连接到你的,你也可以删除你所拥有的验证
你好谢谢你的回答。NoMethodError undefined method[]”用于nil:NilClass:app/controllers/diseass\u controller.rb:7:in new“如何将day\u id传递给新操作?我想找到day id。我写@day=day.findparams[:id]我得到一个错误ActiveRecord::RecordNotFound在没有IDI的情况下找不到Day,如果我写的是@Day=Day.find2或1/3/4 etc id正在传递并插入到db表courses中,因为您没有向该操作传递Day id。通过path或params传递它。我知道find_by选项不适用于我的案例,因为它会找到第一条记录。当我使用@day=day.findparams[:id]时,我会收到一个错误ActiveRecord::RecordNotFound在没有id的情况下找不到day参数[:id]从URL中获取一个参数,并且我使用ajax,我的URL不会更改,id也无法检索。这个想法正确吗?非常感谢你,克拉拉!我在调用新操作时添加此id:@day。
<div class="new dish">
<%= form_for @dish do |d| %>
<%= d.text_field :name, :placeholder => "Dish name" %>
<%= d.text_area :description, :placeholder => "Description" %>
<%= d.text_field :price, :placeholder => "Dish price" %>
<%= d.fields_for :courses do |c| %>
<%= c.text_field :name, :placeholder => "Course name" %>
<%= c.hidden_field :day_id, value: @day.id %>
<%= d.submit "Save" %>
</div>
<% end %>
<% end %>
Started GET "/dishes/new" for ::1 at 2020-10-20 12:59:34 +0300
Processing by DishesController#new as HTML
Day Load (0.2ms) SELECT "days".* FROM "days" WHERE "days"."id" IS NULL LIMIT ? [["LIMIT", 1]]
↳ app/controllers/dishes_controller.rb:7:in `new'
Rendering dishes/new.html.erb within layouts/application
Rendered dishes/new.html.erb within layouts/application (Duration: 2.9ms | Allocations: 1942)
Completed 500 Internal Server Error in 8ms (ActiveRecord: 0.2ms | Allocations: 4393)
ActionView::Template::Error (undefined method `id' for nil:NilClass):
5: <%= d.text_field :price, :placeholder => "Dish price" %>
6: <%= d.fields_for :courses do |c| %>
7: <%= c.text_field :name, :placeholder => "Course name" %>
8: <%= c.hidden_field :day_id, value: @day.id %>
9: <%= d.submit "Save" %>
10: </div>
11: <% end %>
app/views/dishes/new.html.erb:8
app/views/dishes/new.html.erb:6
app/views/dishes/new.html.erb:2
@day = Day.find_by(params[:id])
@day = Day.find_by_id(params[:id])
@day = Day.find_by_id(params[:id])
GET "/dishes/new"
class Course < ApplicationRecord
belongs_to :day
, optional: true
belongs_to :dish
end