0

私は数日間探していましたが、何が起こっているのかわかりません。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 を追加しましたが、それもうまくいかないようでした。

うまくいけば、誰かが私が見ていない問題を見てくれます。

読んでくれてありがとう。

4

0 に答える 0