Я не получаюМаршрут к неправильному URL
ActionView :: Template :: Ошибка (нет соответствующего маршрута {: действие => "to_approve",: контроллер => "microposts",: ИД => nil} отсутствуют необходимые ключи: [: id]):
Нет совпадений маршрутов {: action => "to_approve",: controller => "microposts", : id => nil} отсутствуют необходимые ключи: [: id ]
Но это не имеет смысла, потому что я маршрутизации другой маршрут
route.rb
match '/microposts/:id/approve', to: 'microposts#to_approve' , via: [:get, :post], as: 'approve_micropost'
match '/microposts/to_approve', to: 'microposts#approve' , via: :get
controller.rb
def show
@tag = Tag.find(params[:id])
@microposts = @tag.microposts
end
show.html.rb
<%= render @microposts %>
_micropost.html.rb - Здесь линия он показывает ошибку на
<% if is_an_admin? %>
<%= link_to "Approve", approve_micropost_path(micropost.id) %>
<% end %>
micropost_controller.rb
def approve
@microposts = Micropost.unapproved
end
def to_approve
micropost = Micropost.unapproved_by_id(params[:id])
if micropost.update_attributes(approved: true)
flash[:success] = "Approved!"
else
flash[:error] = "Not approved!"
end
redirect_back_or microposts_to_approve_path
end
micropost.rb
default_scope { where(approved: true).order('microposts.created_at DESC')}
def self.unapproved
self.unscoped.all.where(approved: false).order('microposts.created_at DESC')
end
def self.unapproved_by_id(id = nil)
self.unscoped.all.where(id: id)
end
Вы можете видеть, что пытается создать microposts_to_approve_path
с :id
, которые, очевидно, не существует, но я написал approve_micropost_path
.
Что мне не хватает?
Плюс в маршрут для microposts_to_approve_path
я позволил [:get, :post]
хотя я только хочу, чтобы разрешить доступ к to_approve методу через on_click
событий (пост?) И не посмотреть на него .. Как я должен переписать это?
rake routes
:
microposts POST /microposts(.:format) microposts#create
micropost DELETE /microposts/:id(.:format) microposts#destroy
approve_micropost GET|POST /microposts/:id/approve(.:format) microposts#to_approve
microposts_to_approve GET /microposts/to_approve(.:format) microposts#approve
На странице ошибки, параметры:
Request
Parameters:
{"id"=>"4",
"name"=>"tag name"}
Решение
Проблема заключалась в том, потому что я использую default_scope
и чем объекте I работал с не совсем нормально.
Перед исправлением
@microposts = @tag.microposts #@microposts is CollectionProxy
После
@microposts = @tag.microposts.all #@microposts is AssociationRelation
После того, как я изменение .all
проблема была решена.
BTW, это ошибка?В моем предложении default_scope
не следует изменять поведение по умолчанию.
Продемонстрируйте 'грабли routes' результат – Prashant4224
Пожалуйста, покажите ваши параметры. – thedanotto