Rails 4.2:日志中的未知属性或服务器错误
Rails 4.2: Unknown Attribute or Server Error in Log
我有一个带有 select_tag
和 options_from_collection_for_select
的表格,我似乎无法通过。在视图中,当上传 ID 设置为 uploadzip_id
时,我得到一个 302 重定向,当它设置为 uploadzip_ids
时,我得到一个 Unknown Attribute
错误。
我有点困惑,因为我的关系是和外键一起设置的。我有另一个带有复选框的模型,名为 Uploadpdf
,效果很好。
这是设置..
class Campaign < ActiveRecord::Base
has_one :uploadzip
end
class Uploadzip < ActiveRecord::Base
belongs_to :campaign
end
db/schema.rb
create_table "campaigns", force: :cascade do |t|
t.string "name"
t.text "comment"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
create_table "uploadzips", force: :cascade do |t|
t.string "file_name"
t.string "file_type"
t.datetime "date"
t.integer "size"
t.integer "pages"
t.string "file_ident"
t.string "md5"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "campaign_id"
end
add_foreign_key "uploadzips", "campaigns"
app/controllers/campaign_controller.rb
class CampaignsController < ApplicationController
def index
@campaigns = Campaign.all.order("created_at DESC")
end
def new
@campaign = Campaign.new
end
def create
@campaign = Campaign.new(campaign_params)
if @campaign.save
flash[:success] = "Campaign Successfully Launched!"
redirect_to @campaign
else
flash[:error] = "There was a problem launching your Campaign."
redirect_to new_campaign_path
end
end
.....
private
def campaign_params
params.require(:campaign).permit(:name, :comment, :uploadzip_ids, uploadpdf_ids: [])
end
end
views/campaigns/_form.rb
<%= form_for @campaign, url: {action: "create"} do |f| %>
.....some typical fields..
<%= f.label :data_file, class: "right-label" %>
<%= select_tag campaign[uploadzip_ids],
options_from_collection_for_select(
Uploadzip.all, :id, :file_name
), { include_blank: "Include a Zip File" } %>
.....some more typical fields
<% end %>
更新
我已经按照建议更改了代码以更好地反映外键。现在已成功创建活动,但未与所选 uploadzip
Zip 文件相关联。当调用 @campaign.uploadzip
时,它 returns nil
。
这是更新后的代码:
<%= select_tag "uploadzip[campaign_id]",
options_from_collection_for_select(
Uploadzip.all, :id, :file_name
), { include_blank: "Include a Zip File" } %>
我也把控制器params.require
改成了..
def campaign_params
params.require(:campaign).permit(:name, :comment, :campaign_id, uploadpdf_ids: [])
end
根据您的协会设置,foreign_key 应该是 campaign_id
而不是 uploadzip_id
。您应该根据您的用例更改 associations 或 foreign_key。
我还建议您关注这些 Guides 以了解更多关于协会的信息。
302 重定向可能不是坏事,因为您正在执行 redirect_to new_campaign_path
。当您在视图和控制器 params.permit
部分中使用 uploadzip_id
时,记录是否正确创建?
FaceBook 小组的成员通过添加一点帮助我解决了这个问题
控制器中的额外逻辑..
if @campaign.save
zip = Uploadzip.find(params[:uploadzip_id])
zip.campaign = @campaign
zip.save
flash[:success] = "Campaign Successfully Launched!"
redirect_to @campaign
else
flash[:error] = "There was a problem launching your Campaign."
redirect_to new_campaign_path
end
..遇到了更改 select_tag 的名称。
<%= select_tag :uploadzip_id,
options_from_collection_for_select(
Uploadzip.all, :id, :file_name
), { include_blank: "Include a Zip File" } %>
我有一个带有 select_tag
和 options_from_collection_for_select
的表格,我似乎无法通过。在视图中,当上传 ID 设置为 uploadzip_id
时,我得到一个 302 重定向,当它设置为 uploadzip_ids
时,我得到一个 Unknown Attribute
错误。
我有点困惑,因为我的关系是和外键一起设置的。我有另一个带有复选框的模型,名为 Uploadpdf
,效果很好。
这是设置..
class Campaign < ActiveRecord::Base
has_one :uploadzip
end
class Uploadzip < ActiveRecord::Base
belongs_to :campaign
end
db/schema.rb
create_table "campaigns", force: :cascade do |t|
t.string "name"
t.text "comment"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
create_table "uploadzips", force: :cascade do |t|
t.string "file_name"
t.string "file_type"
t.datetime "date"
t.integer "size"
t.integer "pages"
t.string "file_ident"
t.string "md5"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "campaign_id"
end
add_foreign_key "uploadzips", "campaigns"
app/controllers/campaign_controller.rb
class CampaignsController < ApplicationController
def index
@campaigns = Campaign.all.order("created_at DESC")
end
def new
@campaign = Campaign.new
end
def create
@campaign = Campaign.new(campaign_params)
if @campaign.save
flash[:success] = "Campaign Successfully Launched!"
redirect_to @campaign
else
flash[:error] = "There was a problem launching your Campaign."
redirect_to new_campaign_path
end
end
.....
private
def campaign_params
params.require(:campaign).permit(:name, :comment, :uploadzip_ids, uploadpdf_ids: [])
end
end
views/campaigns/_form.rb
<%= form_for @campaign, url: {action: "create"} do |f| %>
.....some typical fields..
<%= f.label :data_file, class: "right-label" %>
<%= select_tag campaign[uploadzip_ids],
options_from_collection_for_select(
Uploadzip.all, :id, :file_name
), { include_blank: "Include a Zip File" } %>
.....some more typical fields
<% end %>
更新
我已经按照建议更改了代码以更好地反映外键。现在已成功创建活动,但未与所选 uploadzip
Zip 文件相关联。当调用 @campaign.uploadzip
时,它 returns nil
。
这是更新后的代码:
<%= select_tag "uploadzip[campaign_id]",
options_from_collection_for_select(
Uploadzip.all, :id, :file_name
), { include_blank: "Include a Zip File" } %>
我也把控制器params.require
改成了..
def campaign_params
params.require(:campaign).permit(:name, :comment, :campaign_id, uploadpdf_ids: [])
end
根据您的协会设置,foreign_key 应该是 campaign_id
而不是 uploadzip_id
。您应该根据您的用例更改 associations 或 foreign_key。
我还建议您关注这些 Guides 以了解更多关于协会的信息。
302 重定向可能不是坏事,因为您正在执行 redirect_to new_campaign_path
。当您在视图和控制器 params.permit
部分中使用 uploadzip_id
时,记录是否正确创建?
FaceBook 小组的成员通过添加一点帮助我解决了这个问题 控制器中的额外逻辑..
if @campaign.save
zip = Uploadzip.find(params[:uploadzip_id])
zip.campaign = @campaign
zip.save
flash[:success] = "Campaign Successfully Launched!"
redirect_to @campaign
else
flash[:error] = "There was a problem launching your Campaign."
redirect_to new_campaign_path
end
..遇到了更改 select_tag 的名称。
<%= select_tag :uploadzip_id,
options_from_collection_for_select(
Uploadzip.all, :id, :file_name
), { include_blank: "Include a Zip File" } %>