0

Rails アプリで STI を使用しています。

class Project < ActiveRecord::Base
end

class Video < Project
end

次のルートがあります。

resources :projects
resources :videos, :controller => "projects", :type => "video"

そして、ルートをレークすると、/videos に POST できるはずであることがわかります。

POST   /videos(.:format)   projects#create {:type=>"video"}

しかし、/videos/new にアクセスすると、フォームが /projects に投稿されていることに気付きました

= form_for(@project) do |f|

... creates the following HTML ...

<form action="/projects" method="post" >
  <!-- ommited -->
</form

projects_controller の新しいアクションは次のようになります。

def new
  @project = params[:type].capitalize.constantize.new
end

def create 
  @project = params[:type].capitalize.contstantize.new(project_params)
end

/projects ではなく /videos に投稿したいのですが、/videos で始まる URL では params[:type] は常に「video」に設定されますが、/videos で始まる URL では何も設定されません。 /プロジェクトで。

アップデート:

一時的な修正があります:

= f.hidden_field :type

URL が /projects に変更されたときにトリックを実行しますが、フォームを /videos に投稿したいのですが...

4

3 に答える 3

0

タグを使用すると、次のようにオプションform_forを設定することで、POST 先の URL を変更できます。url

form_for(@project, :url => "/videos")

于 2013-10-27T18:46:40.700 に答える
0

コードに次のものが含まれていたため、質問に削除フラグを付けました。

def self.inherited(child)
  child.instance_eval do
    def model_name
      Project.model_name
    end
  end
  super
end

それを削除した後、すべてが思い通りに機能します。おっと。ごめん!

于 2013-10-27T18:52:06.427 に答える