1

私はレールを始めたばかりで、今まではとても満足していましたが、理解できないことが 1 つあります。

名前空間「Monitor」にいくつかの ActiveRecords モデルがあり、名前空間「Settings」にいくつかのコントローラーがあります。私が達成したいのは、設定コントローラー/フォームで名前空間モデルを使用できることです。

私はこれを持っています:

/config/routes.rb

namespace :settings do
  resources :queues, :channels
end

/app/controllers/settings/queus_controller.rb

class Settings::QueuesController < ApplicationController

  def new
    @queue = Monitor::Queue.new()
    render 'form', :layout => false
  end

  def create
    @queue = Monitor::Queue.new(post_params)

    if (@queue.save)
      @status = 'added'
      render 'success'
    else
      render 'form', :layout => false
    end
  end

  def edit
    @queue = Monitor::Queue.find(params[:id])
    render 'form', :layout => false
  end

  ...
end

/app/models/monitor/queue.rb

module Monitor
  class Queue < ActiveRecord::Base
  end
end

/app/views/settings/form.html.erb

<%= form_for @queue do |f| %>
  ...
<% end %>

現在、Rails はメソッドの欠落について不平を言っています:monitor_queues_pathまたは Rails は/monitor/queues代わりに のようなパスを生成します/settings/queues(:new/edit)

ここで何が欠けていますか?

4

3 に答える 3

6

あー見つけた!

この投稿は私に適切な解決策を与えてくれました: Rails namescoped model object without module prefix route path

問題は、ActiveRecord クラスのプレフィックスにありました。

module Monitor
  class Queue < ActiveRecord::Base
  end
end

これは

module Monitor
  class Queue < ActiveRecord::Base
    def self.model_name
      ActiveModel::Name.new("Monitor::Queue", nil, "Queue")
    end
  end
end

これを変更した後、form_for を正しい方法で変更するだけで済みました。

<%= form_for [:settings, @queue] do |f| %>

そしてそれはそれを修正します:D

于 2013-07-24T07:21:02.760 に答える