неопределенный метод `разрешение' для **вывод опущен**:String

Обновлено: у меня есть link_to, настроенный для удаления объекта, который является вложенным ресурсом. Перед уничтожением у меня есть метод, который проверяет экземпляр этого объекта на основе object_params, но отправленные параметры продолжают поднимать undefined method 'permit' for "asdfsadf":String, когда он пытается сослаться на object_params.

Кнопка:

<%= link_to content_tag('button', '', class: 'btn fa fa-trash-o focus-delete-button'), parent_object_path( :parent_id => focus.z_kf_parent, :id => focus.id, :object => focus), data: {confirm: "Are you sure you want to delete '#{focus.name}'"}, method: :delete %>

Параметры:

 {"_method"=>"delete",
 "authenticity_token"=>"gmlVYHy230Y1lQY=",
 "object"=>"6c1367b1-1d63-4545-bbdb-b8ac9bd39422",
 "action"=>"destroy",
 "controller"=>"objects",
 "parent_id"=>"FA100073-4A0C-4EE0-8FB1-3EC39C61AD39",
 "id"=>"5-bbdb-b8ac9"}

object_params:

def object_params
    params.require(:set_list).permit(:id, :photographer, :digital_tech, :photo_production, :stylist, :stylist_assistant, :hair_makeup, :photographer_assistant, :name, :t_start, :t_finish, :z_kf_parent)
  end

Метод:

def set_object
  binding.pry
  @object = Object.(object_id: object_params[:id]).first
end

Я не правильно устанавливаю параметры в link_to?


person DGG    schedule 02.10.2015    source источник
comment
Я думаю, что ваша ошибка в методе object_params. Можете ли вы вставить сюда содержимое этого метода?   -  person tolgap    schedule 02.10.2015
comment
@tolgap обновил вопрос с object_params   -  person DGG    schedule 02.10.2015
comment
Во-первых, прямо сейчас вы оборачиваете тег <a> вокруг тега <button> с текущей конструкцией link_to, которая у вас есть. При чем здесь content_tag(:button)? Вы можете просто назначить классы этой кнопки для link_to.   -  person tolgap    schedule 02.10.2015
comment
Что-то не вычисляет. Это содержимое params с этим кодом не может произвести такой вывод.   -  person Sergio Tulentsev    schedule 02.10.2015
comment
Здесь "id"=>"5-bbdb-b8ac9" — это строка, а id определяется как int в базе данных. Поэтому измените код на :id => focus.id.to_i.   -  person Prashant4224    schedule 02.10.2015
comment
@ Prashant4020: хм, откуда ты это взял?   -  person Sergio Tulentsev    schedule 02.10.2015
comment
О, кстати, вы действительно назвали свою модель Object? Действительно очень плохой выбор.   -  person Sergio Tulentsev    schedule 02.10.2015
comment
@Prashant4020, вызвав to_i для этой строки, обрежет ее на первом числе, что приведет к 5   -  person DGG    schedule 02.10.2015
comment
@SergioTulentsev, лол, нет, на самом деле я не назвал объект объектом   -  person DGG    schedule 02.10.2015
comment
@Dan: все еще плохой выбор. При поиске ответов нельзя сбивать с толку потенциальных ответчиков.   -  person Sergio Tulentsev    schedule 02.10.2015
comment
@tolgap, чтобы не заставлять вас зависать над комментарием link_to, я нахожу странным то, как написана ссылка (я сопоставил по стилю две другие ссылки на той же странице, что и эта), но кажется, что это слишком.   -  person DGG    schedule 03.10.2015


Ответы (2)


Ваш метод object_params требует наличия параметра с именем set_list. В вашем params такого параметра нет.

Это будет работать для вас:

def set_object
  binding.pry
  @object = Object.where(object_id: params[:id]).first
end

Вам не нужно обертывать поиск params[:id] через permit, так как вы ничего не назначаете массово.

person tolgap    schedule 02.10.2015
comment
Я попробовал это, и он создает экземпляр, но все же удается нажать object_params и вывести ошибку. - person DGG; 03.10.2015
comment
Меня обманывали! Я перезапустил свой сервер, и он работал как шарм! Большое спасибо :) Также из любопытства, если бы я поддерживал object_params, включение set_list в параметры решило бы это по-другому? - person DGG; 03.10.2015
comment
Да, но вам точно не нужно что-то вроде object_params для запроса на выборку. Вам нужно разрешать атрибуты только в том случае, если вы собираетесь сделать что-то вроде Object.new object_params, чтобы вы могли контролировать атрибуты и пользователь не мог установить вредоносные атрибуты. - person tolgap; 03.10.2015

Мне кажется, что вы пытаетесь использовать простой хеш для создания объекта, где ожидаются сильные параметры.

Использовать

@object = Object.where(object_params).first

вместо того, чтобы пытаться вставить их внутрь хэша в методе сборки

Изменить

Также кажется, что ваша ссылка требует обновления:

parent_object_path(set_list: {id: ..., etc})

так как ваш код говорит, что он ожидает объект set_list.

** Предыдущее редактирование было неправильным, извините **

person Phil    schedule 02.10.2015
comment
Это по-прежнему возвращало ту же ошибку, возможно, потому, что она все еще ищет object_params? Кроме того, возможно ли, что он ищет объект, но я даю ему строку? - person DGG; 03.10.2015