【发布时间】:2017-01-27 20:04:14
【问题描述】:
我想从组织展示页面创建资产。我需要将组织 ID 传递给资产以进行创建。
# ../models/organisation.rb
has_many :assets
# ../models/asset.rb
belongs_to :organisation
我有一个创建资产的按钮,它在 URL 参数中传递了 organization.id。
# ../views/organisations/show.html.erb
<%= link_to 'New Asset', new_asset_path(:organisation_id => @organisation.id) %>
我可以访问../views/assets/new 视图中的organisation_id 值,但是,当我提交表单时,我收到“Method not allowed” 错误。
# ../controllers/assets_controller.rb
def create
@asset = Asset.new(params[:organisation_id])
...
end
Q1:为什么会出现这个错误:
Q2:还有其他方法可以将 organization_id 传递到资产新页面吗? IE。不在网址中。
Q3:如果我只能通过 URL 传递 ID,有没有办法阻止用户对其进行篡改? IE。将组织 ID 更改为其他内容并将资产保存到另一个组织。
Q4:嵌套资源在这种情况下会有帮助吗?
Rails 5.0.0.1、Ruby 2.3.1
【问题讨论】:
-
你需要告诉
Asset.new组织 ID 参数是什么 for 例如:@asset = Asset.new(:organisation_id => params[:organisation_id])否则你只是传递给它一个随机数,它会“wtf is this ?” :D (嗯,从技术上讲,它正在寻找new方法的一个版本,它接受一个不是哈希的单个参数......它找不到,然后告诉你该方法不存在......但相同的差异)。 ;) -
有道理 - 谢谢。
-
变成了答案:)
标签: ruby-on-rails associations url-parameters