Я застрял с этим сценарием.Позвольте мне объяснить следующее.У меня есть модель фильмов, для фильма пользователь может дать оценку, и он может комментировать фильм.Итак, у меня есть таблица очков.На основании количества комментариев, рейтинга и среднего рейтинга и т. Д. Я написал метод def points end в моем контроллере фильмов.
У меня есть контроллер комментариев и метод в нем отдельно для создания комментариев, и для оценки фильма я написал метод в моем контроллере фильмов для создания оценок.Надеюсь, я до сих пор ясно.
поэтому моя проблема такова.Я хочу вызвать этот метод точек в контроллере фильмов во время создания рейтингов и комментариев.
для краткого понимания Я вставляю свой код здесь.
В контроллере фильмов мои два метода (оценки и баллы)
def rate
@movie= Movie.find(params[:movie_id])
@count=0
@test= Rating.find(:last, :conditions=>['movie_id=?', @movie.id])
unless @test.nil? || @test.blank?
@count= @test.count
end
if(params[:submitted])
if @movie.ratings.create(:movie_id => params[:movie_id], :rate => params[:rating], :user_id=> current_user.id, :count=> @count+1)
points
flash[:success] = "Rating was successfully saved."
else
flash[:error] = 'Error. Rating was not saved. Try again later.'
end
redirect_to @movie
end
end
def points
@user= current_user
@movie= Movie.find(params[:movie_id])
total_comments_by_user=Comment.find(:all, :conditions=>['user_id=? AND movie_id=?',@user.id,@movie.id]).count
user_who_rated= Rating.find(:all, :conditions=>['user_id=? AND movie_id=?',@user.id,@movie.id])
@user_who_rated.each do |ur|
if @user=ur.user_id
@ratings_of_each_user=ur.rate
end
end
@over_all_comments_of_movie=Comment.find(:all, :conditions=> ['movie_id=?', @movie.id]).count
@records=Rating.find(:all, :conditions => ['movie_id=?',@movie.id]).collect(& :rate)
unless @records.nil? || @records.blank?
@average_rating = 0.0
@records.each do |r|
@average_rating += r
end
@average_rating = @average_rating/@records.size
end
unless @ratings_of_each_user.nil? || @ratings_of_each_user.blank?
if @total_comments_by_user.nil? || @total_comments_by_user.blank?
else
@div_one=@ratings_of_each_user*@total_comments_by_user
@div_two=@over_all_comments_of_movie* @average_rating
@total=0.0
@total=@div_one.to_f/@div_two.to_f
@find_user_in_points= Point.find(:all, :conditions=> ['user_id=? AND movie_id=?',current_user.id,@movie.id])
if @find_user_in_points.nil? || @find_user_in_points.blank?
Point.create(:user_id=> current_user.id, :movie_id=>@movie.id, :points=> @total)
else
@find_user_in_points.each do |f|
if f.user_id= current_user.id
f. update_attributes(:points=> @total)
end
end
end
end
end
end
Теперь комментирует контроллер
def create
@user=current_user
@movie = Movie.find(params[:movie_id])
@select_params= params[:choice_list] || []
if @select_params.nil? || @select_params.blank?
@comment = @movie.comments.create(params[:comment])
@comment.update_attributes(:user_id=>@user.id, :commenter => @user.username)
else
@comment= @movie.comments.create( :commenter => "user", :body=>params[:comment][:body] , :movie_id=> @movie.id, :user_id=>@user )
end
redirect_to movie_path(@movie)
end
def destroy
@comment = Comment.find(:all, :conditions=>['id=?',params[:id]])
@comment.delete
redirect_to movie_path(@movie)
end
У меня есть ссылка на оценку фильма в моем файле просмотра и форма для добавления комментария к фильму.Я просто хочу использовать этот метод начисления баллов при создании рейтинга и создании комментариев, чтобы я мог выполнить внутренний подсчет баллов и обновить таблицу баллов.
Если вы мне подсказываете, пожалуйста.Можно ли вызвать метод в одном контроллере из другого контроллера, если да, то как и скажите мне, как вызвать метод в том же контроллере.