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 在那一点上不起作用。表单的调用网址是:

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 %>

在控制器的创建方法中,我有以下代码

  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