【问题标题】:Rails - Creating Associated Object with URL paramsRails - 使用 URL 参数创建关联对象
【发布时间】: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 =&gt; params[:organisation_id]) 否则你只是传递给它一个随机数,它会“wtf is this ?” :D (嗯,从技术上讲,它正在寻找 new 方法的一个版本,它接受一个不是哈希的单个参数......它找不到,然后告诉你该方法不存在......但相同的差异)。 ;)
  • 有道理 - 谢谢。
  • 变成了答案:)

标签: ruby-on-rails associations url-parameters


【解决方案1】:

我认为你应该使用like:

  def create
    @asset = Asset.new(organisation_id:params[:organisation_id])
  end

【讨论】:

    【解决方案2】:

    Q.1 - 错误是由于模型的名称 - “资产”。这是 Rails 中的保留字。

    可以通过将资产管道移动到另一个挂载点来修复它。例如:

    # config/initializers/assets.rb
    
    Rails.application.config.assets.prefix = '/pipeline_assets'
    

    这里提到:

    405 Error when trying to POST a file in rails

    Rails 4 Method Not Allowed after Upgrading from Rails 3

    【讨论】:

      【解决方案3】:

      您需要告诉Asset.new organisation_id 参数是什么,例如:

      @asset = Asset.new(:organisation_id => params[:organisation_id])
      

      否则你只是给它传递一个随机数,它会说“这是什么鬼?” :D

      (嗯,从技术上讲,它正在寻找一个新方法的版本,它接受一个不是哈希的单个参数......它找不到,然后告诉你该方法不存在......但是相同的差异)。 ;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        • 1970-01-01
        • 2017-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多