私は数日間探していましたが、何が起こっているのかわかりません。Railsコンソールでテストするとうまく機能するコードがありますが、コントローラーではデータベースエントリの作成を拒否します。
私が使用するモデルは次のとおりです。
class Project < ActiveRecord::Base
attr_accessible :name, :user_id
belongs_to :user
has_many :active_data_sets
has_many :data_sets, :through => :active_data_sets
end
class DataSet < ActiveRecord::Base
attr_accessible :name, :project_id, :filename, :tempfilename
has_many :active_data_sets
has_many :projects, :through => :active_data_sets
end
class ActiveDataSet < ActiveRecord::Base
attr_accessible :active, :data_set_id, :project_id
belongs_to :project
belongs_to :dataset
end
後の段階で、モデルの一部ではないファイルをアップロードしたいので、ビューで form_tag を使用しています。その時点で form_tag が機能しないことがわかりました。フォームの呼び出し URL は次のとおりです。
http://localhost:3000/data_sets/new?project_id=1
とビュー:
<h1>DataSets#new</h1>
<p>Find me in app/views/data_sets/new.html.erb</p>
<%= form_tag import_data_sets_path do %>
<%= hidden_field_tag 'project_id', params[:project_id] %>
<p>
dataset name:
<%= text_field_tag :name %>
</p>
<p>
<%= submit_tag "Create Dataset" %>
</p>
<% end %>
コントローラーの create メソッドには、次のコードがあります
def create
@dataset = DataSet.new
@dataset.active_data_sets.build(:project_id => params[:project_id].to_i)
@dataset.name = params[:name]
@dataset.save
end
Railsコンソールに次のコードを入力すると、データベースに正しいエントリが作成されます。
dataset = DataSet.new
dataset.active_data_sets.build(:project_id => 1)
dataset.name = 'name'
dataset.save
hidden_field_tag がすべてのデータを文字列として返すと思ったので、.to_i を追加しましたが、それもうまくいかないようでした。
うまくいけば、誰かが私が見ていない問題を見てくれます。
読んでくれてありがとう。