Ruby on rails RubyonRails——表单不是从散列中填充的——仅在heroku中,在本地/开发环境中工作良好
继续我的故事,创建一个名为address的多态对象,它与帐户和联系人(以及将来的其他对象)有一对多的关系 show account视图应使用多态数据(可寻址\u id、可寻址\u类型)将参数发送到新的\u地址,在本例中,多态数据是帐户\u id和帐户控制器 show帐户具有以下链接以创建新地址:Ruby on rails RubyonRails——表单不是从散列中填充的——仅在heroku中,在本地/开发环境中工作良好,ruby-on-rails,ruby,heroku,polymorphic-associations,form-for,Ruby On Rails,Ruby,Heroku,Polymorphic Associations,Form For,继续我的故事,创建一个名为address的多态对象,它与帐户和联系人(以及将来的其他对象)有一对多的关系 show account视图应使用多态数据(可寻址\u id、可寻址\u类型)将参数发送到新的\u地址,在本例中,多态数据是帐户\u id和帐户控制器 show帐户具有以下链接以创建新地址: <%= link_to new_address_path(:controller => "addresses", :action => "new", :addressable_typ
<%= link_to new_address_path(:controller => "addresses", :action => "new", :addressable_type => :account, :addressable_id => @accounts.id, ) do %>
<%= (image_tag("address_new.png", :width => "70%")) %>
<br /> New Address
<% end %>
表单字段是隐藏的,所以首先我认为这是create操作中的一个问题,但是在设置字段visible之后,我可以看到问题是heroku没有用hash上的参数填充表单
在localhost中,它可以完美加载,并且URL还显示:
http://localhost:3000/addresses/new?addressable_id=1&addressable_type=accounts
地址/new.html.erb如下所示
<div id="central">
<div id="limiter">
<h1><%= (image_tag("address_new.png", :width => "20%", :align =>"middle")) %> New Address</h1>
<h4>Please insert Account data:</h4>
<%= form_for @addresses, url: {action: "create"} do |f| %>
<table class="tshow" align="left" style="width:100%;">
<col width="50%">
<col width="50%">
<%= f.text_field :addressable_type %>
<%= f.text_field :addressable_id %>
<tr class="even">
<td><%= f.label :no, "No:" %>*</td>
<td><%= f.text_field :no %></td>
</tr>
<tr class="odd">
<td><%= f.label :street, "Street:" %>*</td>
<td><%= f.text_field :street %></td>
</tr>
<tr class="even">
<td><%= f.label :suburb, "Suburb" %>*</td>
<td><%= f.text_field :suburb %></td>
</tr>
<tr class="odd">
<td><%= f.label :code, "Zip:" %>*</td>
<td><%= f.text_field :code %></td>
</tr>
</table>
</div>
<div id="menu">
<ul class="menu">
<!-- Access Check - Create New Account -->
<% if Accessrule.find_by(role_id: current_user.role_id, workspace:2).try(:canwrite?) %>
<li><%= f.submit " ", :type => :image, :src => image_path("address_save.png"), :width =>"60%" %>
<br /> <%= f.submit "Save Address", class: "savetext" %><% end %></li>
<% end %>
<!-- back Accounts -->
<li> <%= link_to :back do %>
<%= (image_tag("address_back.png", :width => "60%")) %>
<br /> Back
<% end %>
</li>
</li>
</ul>
</div>
</div>
在heroku中,这是一种行为:
2016-01-10T02:22:50.293725+00:00 heroku[router]: at=info method=GET path="/addresses/new?addressable_id=1&addressable_type=account" host=vulcanosys.herokuapp.com request_id=f09fa641-f8b4-4546-9c45-6cad598c0759 fwd="110.174.67.117" dyno=web.1 connect=13ms service=30ms status=200 bytes=4678
2016-01-10T02:22:50.274168+00:00 app[web.1]: Started GET "/addresses/new?addressable_id=1&addressable_type=account" for 110.174.67.117 at 2016-01-10 02:22:50 +0000
2016-01-10T02:22:50.279522+00:00 app[web.1]: Accessrule Load (0.6ms) SELECT "accessrules".* FROM "accessrules" WHERE "accessrules"."role_id" = $1 AND "accessrules"."workspace_id" = 3 LIMIT 1 [["role_id", 1]]
2016-01-10T02:22:50.282693+00:00 app[web.1]: SQL (0.5ms) INSERT INTO "logs" ("user_id", "role_id", "workspace_id", "action", "created_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["user_id", 1], ["role_id", 1], ["workspace_id", 3], ["action", "New"], ["created_at", "2016-01-10 02:22:50.281069"]]
2016-01-10T02:22:50.288683+00:00 app[web.1]: Accessrule Load (0.4ms) SELECT "accessrules".* FROM "accessrules" WHERE "accessrules"."role_id" = $1 AND "accessrules"."workspace_id" = 2 LIMIT 1 [["role_id", 1]]
2016-01-10T02:22:50.291283+00:00 app[web.1]: Rendered layouts/_header.html.erb (0.5ms)
2016-01-10T02:22:50.276049+00:00 app[web.1]: Processing by AddressesController#new as HTML
2016-01-10T02:22:50.276089+00:00 app[web.1]: Parameters: {"addressable_id"=>"1", "addressable_type"=>"account"}
2016-01-10T02:22:50.277601+00:00 app[web.1]: User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
2016-01-10T02:22:50.280790+00:00 app[web.1]: (0.4ms) BEGIN
2016-01-10T02:22:50.284721+00:00 app[web.1]: (1.4ms) COMMIT
2016-01-10T02:22:50.290048+00:00 app[web.1]: Rendered addresses/new.html.erb within layouts/application (4.3ms)
2016-01-10T02:22:50.292342+00:00 app[web.1]: Completed 200 OK in 16ms (Views: 6.6ms | ActiveRecord: 3.9ms)
2016-01-10T02:22:50.586660+00:00 heroku[router]: at=info method=GET path="/assets/main-e887d4be5a3761150a9e75e8cdbe02be8766d91d0d6fce21a598f9e45ee40bf3.css" host=vulcanosys.herokuapp.com request_id=c2aab484-4cb3-47fc-9d67-eb340f685929 fwd="110.174.67.117" dyno=web.1 connect=3ms service=5ms status=304 bytes=133
2016-01-10T02:22:50.606720+00:00 heroku[router]: at=info method=GET path="/assets/logow-bd7c174b4f1a44bb00b4fc7c15a98c7bfd339679bf9c2d101b2083369a657fc4.png" host=vulcanosys.herokuapp.com request_id=8f40c3f4-e5e6-4e0d-80fa-c38c0dba4369 fwd="110.174.67.117" dyno=web.1 connect=2ms service=7ms status=304 bytes=133
2016-01-10T02:22:50.609673+00:00 heroku[router]: at=info method=GET path="/assets/application-79669da6f547131a23184bf35af9884a3f36dac244c97e2686166cd04e33a046.js" host=vulcanosys.herokuapp.com request_id=5c1be766-73ff-4242-a6e0-263e2c194ba8 fwd="110.174.67.117" dyno=web.1 connect=15ms service=8ms status=304 bytes=133
2016-01-10T02:22:50.574276+00:00 heroku[router]: at=info method=GET path="/assets/tables-fa95ff6a0b1550437c004e8f43db0f1015ceb7461f5e91a53457daa6d06123ab.css" host=vulcanosys.herokuapp.com request_id=d04461f7-d118-41d7-b7f4-c963503590bd fwd="110.174.67.117" dyno=web.1 connect=2ms service=8ms status=304 bytes=133
2016-01-10T02:22:50.925131+00:00 heroku[router]: at=info method=GET path="/assets/logof-94cafb7b2caedd8d7695e584b5ef3055aa023d772104795b8953a6d478e09bc2.png" host=vulcanosys.herokuapp.com request_id=e418984d-f4c4-454d-8423-ba857b82b897 fwd="110.174.67.117" dyno=web.1 connect=2ms service=5ms status=304 bytes=133
我为此苦苦挣扎了一周,不知道该怎么办,我甚至在考虑对多态关联进行硬编码。我通过以下步骤解决了上述问题: 将嵌套路由应用到具有浅层的多态模型地址,这将忽略编辑、更新和删除操作的关联
shallow do
resources :accounts do
resources :addresses
end
end
shallow do
resources :contacts do
resources :addresses
end
end
当应用程序尚未完全投入生产时,我还更改了一些设置
Config.application.environment.production
config.assets.digest = true
config.eager_load = false
2016-01-10T02:22:50.293725+00:00 heroku[router]: at=info method=GET path="/addresses/new?addressable_id=1&addressable_type=account" host=vulcanosys.herokuapp.com request_id=f09fa641-f8b4-4546-9c45-6cad598c0759 fwd="110.174.67.117" dyno=web.1 connect=13ms service=30ms status=200 bytes=4678
2016-01-10T02:22:50.274168+00:00 app[web.1]: Started GET "/addresses/new?addressable_id=1&addressable_type=account" for 110.174.67.117 at 2016-01-10 02:22:50 +0000
2016-01-10T02:22:50.279522+00:00 app[web.1]: Accessrule Load (0.6ms) SELECT "accessrules".* FROM "accessrules" WHERE "accessrules"."role_id" = $1 AND "accessrules"."workspace_id" = 3 LIMIT 1 [["role_id", 1]]
2016-01-10T02:22:50.282693+00:00 app[web.1]: SQL (0.5ms) INSERT INTO "logs" ("user_id", "role_id", "workspace_id", "action", "created_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["user_id", 1], ["role_id", 1], ["workspace_id", 3], ["action", "New"], ["created_at", "2016-01-10 02:22:50.281069"]]
2016-01-10T02:22:50.288683+00:00 app[web.1]: Accessrule Load (0.4ms) SELECT "accessrules".* FROM "accessrules" WHERE "accessrules"."role_id" = $1 AND "accessrules"."workspace_id" = 2 LIMIT 1 [["role_id", 1]]
2016-01-10T02:22:50.291283+00:00 app[web.1]: Rendered layouts/_header.html.erb (0.5ms)
2016-01-10T02:22:50.276049+00:00 app[web.1]: Processing by AddressesController#new as HTML
2016-01-10T02:22:50.276089+00:00 app[web.1]: Parameters: {"addressable_id"=>"1", "addressable_type"=>"account"}
2016-01-10T02:22:50.277601+00:00 app[web.1]: User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
2016-01-10T02:22:50.280790+00:00 app[web.1]: (0.4ms) BEGIN
2016-01-10T02:22:50.284721+00:00 app[web.1]: (1.4ms) COMMIT
2016-01-10T02:22:50.290048+00:00 app[web.1]: Rendered addresses/new.html.erb within layouts/application (4.3ms)
2016-01-10T02:22:50.292342+00:00 app[web.1]: Completed 200 OK in 16ms (Views: 6.6ms | ActiveRecord: 3.9ms)
2016-01-10T02:22:50.586660+00:00 heroku[router]: at=info method=GET path="/assets/main-e887d4be5a3761150a9e75e8cdbe02be8766d91d0d6fce21a598f9e45ee40bf3.css" host=vulcanosys.herokuapp.com request_id=c2aab484-4cb3-47fc-9d67-eb340f685929 fwd="110.174.67.117" dyno=web.1 connect=3ms service=5ms status=304 bytes=133
2016-01-10T02:22:50.606720+00:00 heroku[router]: at=info method=GET path="/assets/logow-bd7c174b4f1a44bb00b4fc7c15a98c7bfd339679bf9c2d101b2083369a657fc4.png" host=vulcanosys.herokuapp.com request_id=8f40c3f4-e5e6-4e0d-80fa-c38c0dba4369 fwd="110.174.67.117" dyno=web.1 connect=2ms service=7ms status=304 bytes=133
2016-01-10T02:22:50.609673+00:00 heroku[router]: at=info method=GET path="/assets/application-79669da6f547131a23184bf35af9884a3f36dac244c97e2686166cd04e33a046.js" host=vulcanosys.herokuapp.com request_id=5c1be766-73ff-4242-a6e0-263e2c194ba8 fwd="110.174.67.117" dyno=web.1 connect=15ms service=8ms status=304 bytes=133
2016-01-10T02:22:50.574276+00:00 heroku[router]: at=info method=GET path="/assets/tables-fa95ff6a0b1550437c004e8f43db0f1015ceb7461f5e91a53457daa6d06123ab.css" host=vulcanosys.herokuapp.com request_id=d04461f7-d118-41d7-b7f4-c963503590bd fwd="110.174.67.117" dyno=web.1 connect=2ms service=8ms status=304 bytes=133
2016-01-10T02:22:50.925131+00:00 heroku[router]: at=info method=GET path="/assets/logof-94cafb7b2caedd8d7695e584b5ef3055aa023d772104795b8953a6d478e09bc2.png" host=vulcanosys.herokuapp.com request_id=e418984d-f4c4-454d-8423-ba857b82b897 fwd="110.174.67.117" dyno=web.1 connect=2ms service=5ms status=304 bytes=133
shallow do
resources :accounts do
resources :addresses
end
end
shallow do
resources :contacts do
resources :addresses
end
end
config.assets.digest = true
config.eager_load = false