Я создал один has_many через отношения в rails api. Я также использовал вложенные маршруты.Вложенные маршруты и операции CRUD с дополнительными значениями для обмана в Rails
Мои модели, как показано ниже;
class Author < ActiveRecord::Base
has_many :comments
has_many :posts, :through => :comments
end
class Post < ActiveRecord::Base
has_many :comments
has_many :authors, :through => :comments
end
class Comment < ActiveRecord::Base
belongs_to :author
belongs_to :post
end
мои маршруты, как показано ниже;
Rails.application.routes.draw do
namespace :api, defaults: { :format => 'json' } do
resources :posts do
resources :comments
end
resources :authors
end
end
Так вот мои цели являются
- Комментарии вложенными маршрут таким образом, что я могу создавать и отображать комментарии от пост
- Здесь нет какой-либо пост автора. Автор предназначен для владельцев комментариев
Я реализовал концепции и работаю практически со всеми. Но я столкнулся со следующими проблемами: с ассоциациями
- Как добавить дополнительные поля для связанной таблицы при создании родительского элемента. Здесь мое требование - когда создается пост, мне нужно вставить одну запись по умолчанию для комментариев. Мой пост реализация контроллера для создания как ниже
def create params = create_params.merge(:record_status => 1) @post = Post.new(params) @post.authors << Author.find(1) if @post.save render :show, status: :created end end def show @post = Post.find(params[:id]) end private def create_params params.permit(:name, :description, :author_id) end
Здесь я передаю AUTHOR_ID в запросе JSON. Это необходимо добавить как идентификатор автора в таблицу комментариев. Теперь я просто жестко закодирован как 1. Я использовал '< <' для входа в ассоциацию. Это работает, но мне также нужно включить еще два поля, которые: комментарии и: record_status. Опять же: комментарии взяты из самого запроса.
Примечание: это не приложение mvc для рельсов. Это rails api и input as json.
- Когда я показываю комментарии, используя вложенные маршруты, мне нужно показать автора, а также комментарии из таблицы комментариев. Мой метод контроллера комментариев:
class Api::CommentsController < ApplicationController before_filter :fetch_post def index @authors = @post.authors.where(:record_status => 1, comments: { record_status: 1 }) end private def fetch_post @post = Post.find(params[:post_id]) end end
Здесь я получил автор, но не правильные комментарии в соединительной таблице «комментарии»
Пожалуйста, помогите мне решить эти проблемы
спасибо. Я решил, что получил. Но небольшое изменение. Я не хочу значение поля record_status в запросе. Вместо этого мне нужно указать значение по умолчанию. Как я объединяю значение record_status связанной таблицы в параметрах. – Akhil
Затем вы можете вынуть его из разрешенных параметров. Пусть клиент отправит значение, а затем сервер проигнорирует его. B/c это не разрешенный параметр. Или удалите свойство до того, как ваш клиент отправит его на сервер. –
Я могу ограничить параметры от клиента. Но мне нужно включить эти параметры в мой контроллер. Я имею в виду, что параметры должны предоставляться внутренне не клиенту. Здесь мне нужно удалить эти параметры из разрешенных параметров и объединить их в контроллер. Но слияние не сработало, пожалуйста, помогите – Akhil