我想从组织显示页面创建资产。我需要将组织ID传递给Asset进行创建。
# ../models/organisation.rb
has_many :assets
# ../models/asset.rb
belongs_to :organisation
我有一个按钮来创建一个资产,它正在URL参数中传递organisation.id。
# ../views/organisations/show.html.erb
<%= link_to 'New Asset', new_asset_path(:organisation_id => @organisation.id) %>
我可以访问organisation_id
视图中的../views/assets/new
值,但是,当我提交表单时,我收到“Method not allowed”
错误。
# ../controllers/assets_controller.rb
def create
@asset = Asset.new(params[:organisation_id])
...
end
Q1:为什么我收到此错误:
Q2:还有另一种方法可以将organisation_id传递到资产新页面吗?即不在网址中。
问题3:如果我只能通过URL传递ID,有没有办法阻止用户篡改它?即将组织ID更改为其他内容并将资产保存到其他组织。
问题4:嵌套资源会在这个实例中有所帮助吗?
Rails 5.0.0.1,Ruby 2.3.1
答案 0 :(得分:0)
我认为你应该使用:
def create
@asset = Asset.new(organisation_id:params[:organisation_id])
end
答案 1 :(得分:0)
Q.1 - 错误是由于模型的名称 - “资产”。这是Rails中的保留字。
可以通过将资产管道移动到另一个安装点来修复它。例如:
# config/initializers/assets.rb
Rails.application.config.assets.prefix = '/pipeline_assets'
如上所述:
答案 2 :(得分:0)
您需要告诉Asset.new
organisation_id
参数是什么,例如:
@asset = Asset.new(:organisation_id => params[:organisation_id])
否则你只是传递一个随机数字而且它已经去了#34; wtf就是这个?&#34; :d
(好吧,从技术上来说,它正在寻找新方法的一个版本,它采用一个不是哈希的单个参数......它无法找到,然后告诉你该方法没有& #39; t存在......但是相同的差异)。 ;)