Заранее благодарим за вашу помощь! У меня есть сайт, построенный в Ruby on Rails (2.3.15, 1.8.7), который позволяет людям создавать маршруты в разных местах и с различными видами деятельности в каждом месте. У сайта есть способ убедиться, что текущий пользователь может только удалить маршруты, связанные с его учетной записью. Код в itineraries_controller.rb сделать это выглядит примерно так:Ограничить доступ к функции «уничтожить» в приложении Ruby on Rails
def destroy
@itinerary = Itinerary.find(params[:id])
if @itinerary.user_id == current_user.id
@itinerary.destroy
respond_to do |format|
format.html { redirect_to('/home') }
format.xml { head :ok }
end
else
redirect_to '/'
end
end
Эта система хорошо работает. Однако я хочу сделать то же самое для деятельности. В Activity_controller я хочу, чтобы текущий пользователь мог только удалить действия, связанные с его учетной записью.
В настоящее время, вот мои четыре модели (с ненужными вещи раздели):
User.rb
class User < ActiveRecord::Base
has_many :itineraries
end
Itinerary.rb
class Itinerary < ActiveRecord::Base
has_many :locations
belongs_to :user
end
Location.rb
class Location < ActiveRecord::Base
belongs_to :itinerary
has_many :activities
end
Activ ity.rb
class Activity < ActiveRecord::Base
belongs_to :location
end
Здесь я начну с деятельности_controller.rb. FYI, my current_user.id создается аутентифицированной_системой.rb, поэтому не беспокойтесь об этой части.
def destroy
@activity = Activity.find(params[:id])
if @itinerary.user_id == current_user.id
@activity.destroy
respond_to do |format|
format.html { redirect_to("/") }
format.xml { head :ok }
end
else
redirect_to '/'
end
end
Я попытался связать модели с помощью has_many: через подход, но я не знаю, как сделать это более трех моделей, и я не был уверен, что это правильный подход в любом случае. Еще раз спасибо за любую помощь, которую вы можете предоставить!
Это решило! Спасибо, Исмаэль. Можете ли вы сказать мне название этого подхода, связанного с разными моделями? Я ноб, но я хотел бы узнать больше (и будет google, чтобы найти хорошие ресурсы, основанные на вашем ответе.) – KDP
Вы можете делать эти танки для отношений, которые вы создали с помощью sort_to и has_many, которые устанавливают эти методы для вы. Вы можете найти информацию об этом, ели гиды –