我一直在寻找几天,但就是找不到发生了什么。我的代码在 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 的原因,但这似乎也没有奏效。
希望有人看到我没有看到的问题。
谢谢阅读。