Last active
June 6, 2016 10:23
-
-
Save flyfy1/4840776de253bed1faed24743d957339 to your computer and use it in GitHub Desktop.
For Solidus: making Property selectable field
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Spree::ProductProperty.class_eval do | |
belongs_to :value_object, class_name: 'Spree::PropertyValue', foreign_key: :value_id | |
before_validation { self.value = value_object.value if value_id and changes[:value_id] } | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Spree::Property.class_eval do | |
enum data_type: [:textable, :selectable] | |
has_many :property_values, :class_name => 'Spree::PropertyValue', foreign_key: :property_id | |
accepts_nested_attributes_for :property_values, allow_destroy: true | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Spree::PropertyValue < ActiveRecord::Base | |
belongs_to :property, :class_name => 'Spree::Property' | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Step 1 | |
class CreateSpreePropertyValues < ActiveRecord::Migration | |
def change | |
create_table :spree_property_values do |t| | |
t.integer :property_id, index: true | |
t.string :value | |
t.timestamps null: false | |
end | |
end | |
end | |
# Step 2 | |
class AddDataTypeToSpreeProperty < ActiveRecord::Migration | |
def change | |
add_column :spree_properties, :data_type, :integer, default: 0 | |
end | |
end | |
# Step 3 | |
class AddValueIdToSpreeProductProperty < ActiveRecord::Migration | |
def change | |
add_column :spree_product_properties, :value_id, :integer, index: true | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Deface::Override.new(virtual_path: 'spree/admin/properties/index', | |
name: 'add_data_type_to_admin_properties_index_header', | |
insert_after: '[data-hook="listing_properties_header"] th:nth-child(2)', | |
text: <<ERB) | |
<th><%= Spree::Property.human_attribute_name(:data_type) %></th> | |
ERB | |
Deface::Override.new(virtual_path: 'spree/admin/properties/index', | |
name: 'add_data_type_to_admin_properties_index_row', | |
insert_after: '[data-hook="listing_properties_row"] td:nth-child(2)', | |
text: <<ERB) | |
<td style="padding-left:1em"><%= property.data_type %></td> | |
ERB | |
Deface::Override.new(virtual_path: 'spree/admin/product_properties/_product_property_fields', | |
name: 'make_property_value_selectable_when_property_is_selectable', | |
replace_contents: '[data-hook="product_property"] .value', | |
text: <<ERB) | |
<%- prop = f.object.property %> | |
<%- if prop&.selectable? %> | |
<%= f.collection_select :value_id, prop.property_values, :id, :value %> | |
<%- else %> | |
<%= f.text_field :value %> | |
<%- end %> | |
ERB | |
Deface::Override.new(virtual_path: 'spree/admin/product_properties/_product_property_fields', | |
name: 'property_name_is_not_modifiable_in_product_property_edit_page', | |
replace_contents: '[data-hook="product_property"] .property_name', | |
text: <<ERB) | |
<%- if f.object.persisted? %> | |
<%= f.object.property_name %> | |
<%= f.hidden_field :property_name %> | |
<%- else %> | |
<%= f.collection_select :property_name, Spree::Property.all, :name, :presentation, {prompt: true}, {id: 'product-select-new-property'} %> | |
<%- end %> | |
ERB |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment