diff --git a/app/views/rails_admin/main/_form_filtering_multiselect.html.haml b/app/views/rails_admin/main/_form_filtering_multiselect.html.haml
index bf6875e7ae..f83f00b3d1 100644
--- a/app/views/rails_admin/main/_form_filtering_multiselect.html.haml
+++ b/app/views/rails_admin/main/_form_filtering_multiselect.html.haml
@@ -41,7 +41,7 @@
- selected_ids = (hdv = field.html_default_value).nil? ? selected_ids : hdv
= form.select field.method_name, collection, { :selected => selected_ids, :object => form.object }, field.html_attributes.reverse_merge({:data => { :filteringmultiselect => true, :options => js_data.to_json }, :multiple => true})
-- if authorized? :new, config.abstract_model
+- if authorized?(:new, config.abstract_model) && field.inline_add
- path_hash = { :model_name => config.abstract_model.to_param, :modal => true }
- path_hash.merge!({ :associations => { field.inverse_of => (form.object.persisted? ? form.object.id : 'new') } }) if field.inverse_of
= link_to " ".html_safe + wording_for(:link, :new, config.abstract_model), '#', :data => { :link => new_path(path_hash) }, :class => "create btn btn-info", :style => 'margin-left:10px'
diff --git a/app/views/rails_admin/main/_form_filtering_select.html.haml b/app/views/rails_admin/main/_form_filtering_select.html.haml
index ac619cfd90..3a93ff0708 100644
--- a/app/views/rails_admin/main/_form_filtering_select.html.haml
+++ b/app/views/rails_admin/main/_form_filtering_select.html.haml
@@ -28,10 +28,10 @@
- selected_id = (hdv = field.html_default_value).nil? ? selected_id : hdv
= form.select field.method_name, collection, { :selected => selected_id, :include_blank => true }, field.html_attributes.reverse_merge({ :data => { :filteringselect => true, :options => js_data.to_json }, :placeholder => t('admin.misc.search') })
-- if authorized? :new, config.abstract_model
+- if authorized?(:new, config.abstract_model) && field.inline_add
- path_hash = { :model_name => config.abstract_model.to_param, :modal => true }
- path_hash.merge!({ :associations => { field.inverse_of => (form.object.persisted? ? form.object.id : 'new') } }) if field.inverse_of
= link_to " ".html_safe + wording_for(:link, :new, config.abstract_model), '#', :data => { :link => new_path(path_hash) }, :class => "btn btn-info create", :style => 'margin-left:10px'
-- if edit_url.present?
+- if edit_url.present? && field.inline_edit
= link_to " ".html_safe + wording_for(:link, :edit, config.abstract_model), '#', :data => { :link => edit_url }, :class => "btn btn-info update #{field.value.nil? && 'disabled'}", :style => 'margin-left:10px'
diff --git a/app/views/rails_admin/main/_form_nested_many.html.haml b/app/views/rails_admin/main/_form_nested_many.html.haml
index c70b42272d..b8f7d41aa3 100644
--- a/app/views/rails_admin/main/_form_nested_many.html.haml
+++ b/app/views/rails_admin/main/_form_nested_many.html.haml
@@ -2,7 +2,7 @@
.btn-group
%a.btn.btn-info.toggler{:'data-toggle' => "button", :'data-target' => "#{form.jquery_namespace(field)} > .tab-content, #{form.jquery_namespace(field)} > .controls > .nav", :class => (field.active? ? 'active' : '')}
%i.icon-white
- - unless field.nested_form[:update_only]
+ - unless field.nested_form[:update_only] || !field.inline_add
= form.link_to_add " #{wording_for(:link, :new, field.associated_model_config.abstract_model)}".html_safe, field.name, { :class => 'btn btn-info' }
= form.errors_for(field)
= form.help_for(field)
diff --git a/lib/rails_admin/config/fields/types/belongs_to_association.rb b/lib/rails_admin/config/fields/types/belongs_to_association.rb
index 300b2773a2..e7ba09807b 100644
--- a/lib/rails_admin/config/fields/types/belongs_to_association.rb
+++ b/lib/rails_admin/config/fields/types/belongs_to_association.rb
@@ -23,6 +23,14 @@ class BelongsToAssociation < RailsAdmin::Config::Fields::Association
nested_form ? :form_nested_one : :form_filtering_select
end
+ register_instance_option :inline_add do
+ true
+ end
+
+ register_instance_option :inline_edit do
+ true
+ end
+
def selected_id
bindings[:object].send(foreign_key)
end
diff --git a/lib/rails_admin/config/fields/types/has_many_association.rb b/lib/rails_admin/config/fields/types/has_many_association.rb
index 699b419f70..b359600182 100644
--- a/lib/rails_admin/config/fields/types/has_many_association.rb
+++ b/lib/rails_admin/config/fields/types/has_many_association.rb
@@ -17,6 +17,10 @@ class HasManyAssociation < RailsAdmin::Config::Fields::Association
false
end
+ register_instance_option :inline_add do
+ true
+ end
+
def method_name
nested_form ? "#{super}_attributes".to_sym : "#{super.to_s.singularize}_ids".to_sym # name_ids
end
diff --git a/lib/rails_admin/config/fields/types/has_one_association.rb b/lib/rails_admin/config/fields/types/has_one_association.rb
index dacde0aa4d..1df74bdf2b 100644
--- a/lib/rails_admin/config/fields/types/has_one_association.rb
+++ b/lib/rails_admin/config/fields/types/has_one_association.rb
@@ -17,6 +17,15 @@ class HasOneAssociation < RailsAdmin::Config::Fields::Association
(o = value) && o.send(associated_model_config.object_label_method)
end
+ register_instance_option :inline_add do
+ true
+ end
+
+ register_instance_option :inline_edit do
+ true
+ end
+
+
def editable?
(nested_form || abstract_model.model.new.respond_to?("#{self.name}_id=")) && super
end
diff --git a/spec/integration/config/edit/rails_admin_config_edit_spec.rb b/spec/integration/config/edit/rails_admin_config_edit_spec.rb
index eef2ba178f..97e2ef008e 100644
--- a/spec/integration/config/edit/rails_admin_config_edit_spec.rb
+++ b/spec/integration/config/edit/rails_admin_config_edit_spec.rb
@@ -593,6 +593,79 @@ class HelpTest < Tableless
expect(find("#team_division_id_field .help-block")).to have_content("Optional")
expect(find("#team_name_field .help-block")).to have_content("Required")
end
+
+ it "can hide the add button on an associated field" do
+ RailsAdmin.config Player do
+ edit do
+ field :team do
+ inline_add false
+ end
+ field :draft do
+ inline_add false
+ end
+ field :comments do
+ inline_add false
+ end
+ end
+ end
+ visit new_path(:model_name => "player")
+ should have_no_selector('a', :text => 'Add a new Team')
+ should have_no_selector('a', :text => 'Add a new Draft')
+ should have_no_selector('a', :text => 'Add a new Comment')
+ end
+
+ it "can show the add button on an associated field" do
+ RailsAdmin.config Player do
+ edit do
+ field :team do
+ inline_add true
+ end
+ field :draft do
+ inline_add true
+ end
+ field :comments do
+ inline_add true
+ end
+ end
+ end
+ visit new_path(:model_name => "player")
+ should have_selector('a', :text => 'Add a new Team')
+ should have_selector('a', :text => 'Add a new Draft')
+ should have_selector('a', :text => 'Add a new Comment')
+ end
+
+ it "can hide the edit button on an associated field" do
+ RailsAdmin.config Player do
+ edit do
+ field :team do
+ inline_edit false
+ end
+ field :draft do
+ inline_edit false
+ end
+ end
+ end
+ visit new_path(:model_name => "player")
+ should have_no_selector('a', :text => 'Edit this Team')
+ should have_no_selector('a', :text => 'Edit this Draft')
+ end
+
+ it "can show the edit button on an associated field" do
+ RailsAdmin.config Player do
+ edit do
+ field :team do
+ inline_edit true
+ end
+ field :draft do
+ inline_edit true
+ end
+ end
+ end
+ visit new_path(:model_name => "player")
+ should have_selector('a', :text => 'Edit this Team')
+ should have_selector('a', :text => 'Edit this Draft')
+ end
+
end
describe "bindings" do
@@ -1023,4 +1096,5 @@ def color_enum
should have_selector(".color_type input")
end
end
+
end