Continuer sur ma saga pour créer un objet polymorphe appelé adresse qui a une relation un à plusieurs avec les comptes et les contacts (et dans le avenir pour d'autres objets).Ruby on Rails - Formulaire non peuplé de hash - Uniquement en heroku, fonctionne bien sur l'environnement local/dev
Ruby Polymorphic association working locally but not in heroku
La vue du compte émission doit envoyer des paramètres à NEW_ADDRESS avec les données polymorphes (addressable_id, addressable_type) qui dans ce cas est le account_id et le contrôleur de compte.
Le compte d'exposition ont le lien suivant pour créer une nouvelle adresse:
<%= 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 %>
Et après avoir transmis l'URL montre:
http://vulcanosys.herokuapp.com/addresses/new?addressable_id=1&addressable_type=accounts
Les champs de formulaire étaient cachés, donc tout d'abord je pensais que ce était un problème dans l'action create, mais après avoir défini les champs visibles, je peux voir que le problème est que heroku ne remplit pas le formulaire avec le paramètre sur hash.
Alors que dans le localhost il charge parfaitement et les urls montre aussi:
http://localhost:3000/addresses/new?addressable_id=1&addressable_type=accounts
les adresses/new.html.erb est la suivante
<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>
Le addresses_controller
class AddressesController < ApplicationController
before_action :logged_in_user
def address_params
params.require(:address).permit(:id, :no, :street, :suburb, :code, :details, :addressable_type, :addressable_id)
end
def new
if Accessrule.find_by(role_id: current_user.role_id, workspace:3).try(:canwrite?)
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"New")
@addresses = Address.new(:addressable_type => params[:addressable_type],:addressable_id => params[:addressable_id])
else
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"New !Access Denied! ")
flash[:notice] = "You don't have access to create Addresses."
redirect_to :back
end
end
def create
if Accessrule.find_by(role_id: current_user.role_id, workspace:3).try(:canwrite?)
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"Create", details: address_params)
@addresses = Address.new(address_params)
if @addresses.save
flash[:notice] = 'Address Saved'
redirect_to @address.addressable
else
render "new"
end
else
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"Create !Access Denied! ")
flash[:notice] = "You don't have access to create Addresses."
redirect_to :back
end
end
def edit
if Accessrule.find_by(role_id: current_user.role_id, workspace:3).try(:canupdate?)
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"Edit", details: params[:id])
@address = Address.find(params[:id])
else
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"Edit !Access Denied! ", details: params[:id])
flash[:notice] = "You don't have access to edit Addresses."
redirect_to :back
end
end
def update
if Accessrule.find_by(role_id: current_user.role_id, workspace:3).try(:canupdate?)
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"Update", details: address_params)
@accounts = Account.all
@address = Address.find(params[:id])
if @address.update_attributes(address_params)
redirect_to @address.addressable
flash[:notice] = 'Account Updated'
else
render "edit"
flash[:error]
end
else
flash[:notice] = "You don't have access to edit Addresss."
redirect_to :back
end
end
def show
if Accessrule.find_by(role_id: current_user.role_id, workspace:3).try(:canread?)
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"View", details: params[:id])
@address = Address.find(params[:id])
else
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"View !Access Denied! ", details: params[:id])
flash[:notice] = "You don't have access to view Addresss."
redirect_to :back
end
end
def destroy
if Accessrule.find_by(role_id: current_user.role_id, workspace:3).try(:candelete?)
@address = Address.find(params[:id])
@logs = Log.create(user_id: current_user.id , role_id: current_user.role_id, workspace_id:3, action:"Delete", details: params[:id])
@address.destroy
redirect_to :back
flash[:notice] = 'Address Deleted'
else
flash[:notice] = "You don't have access to delete Addresss."
redirect_to :back
end
end
# Before Filters
# Confirms if User is logged-in
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in."
redirect_to root_path
end
end
end
Les journaux localhost lors de la création d'une nouvelle adresse à partir du compte (qui fonctionne parfaitement) sont ci-dessous:
Started GET "/addresses/new?addressable_id=1&addressable_type=account" for 127.0.0.1 at 2016-01-10 13:16:09 +1100
Started GET "/addresses/new?addressable_id=1&addressable_type=account" for 127.0.0.1 at 2016-01-10 13:16:09 +1100
Processing by AddressesController#new as HTML
Processing by AddressesController#new as HTML
Parameters: {"addressable_id"=>"1", "addressable_type"=>"account"}
Parameters: {"addressable_id"=>"1", "addressable_type"=>"account"}
User Load (260.9ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
User Load (260.9ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
Accessrule Load (261.2ms) SELECT "accessrules".* FROM "accessrules" WHERE "accessrules"."role_id" = $1 AND "accessrules"."workspace_id" = 3 LIMIT 1 [["role_id", 1]]
Accessrule Load (261.2ms) SELECT "accessrules".* FROM "accessrules" WHERE "accessrules"."role_id" = $1 AND "accessrules"."workspace_id" = 3 LIMIT 1 [["role_id", 1]]
(259.7ms) BEGIN
(259.7ms) BEGIN
SQL (261.6ms) 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:16:10.427199"]]
SQL (261.6ms) 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:16:10.427199"]]
(261.8ms) COMMIT
(261.8ms) COMMIT
Accessrule Load (261.6ms) SELECT "accessrules".* FROM "accessrules" WHERE "accessrules"."role_id" = $1 AND "accessrules"."workspace_id" = 2 LIMIT 1 [["role_id", 1]]
Accessrule Load (261.6ms) SELECT "accessrules".* FROM "accessrules" WHERE "accessrules"."role_id" = $1 AND "accessrules"."workspace_id" = 2 LIMIT 1 [["role_id", 1]]
Rendered addresses/new.html.erb within layouts/application (273.2ms)
Rendered addresses/new.html.erb within layouts/application (273.2ms)
Rendered layouts/_header.html.erb (2.5ms)
Rendered layouts/_header.html.erb (2.5ms)
Completed 200 OK in 1673ms (Views: 99.7ms | ActiveRecord: 1566.9ms)
Completed 200 OK in 1673ms (Views: 99.7ms | ActiveRecord: 1566.9ms)
alors que dans ce Heroku est le comportement:
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
Je me bats pour une semaine à ce sujet, ne sais pas quoi faire, je suis même de penser à coder en dur l'association polymorphique.