показать элементы связанных таблиц с помощью ng-repeat

0

Я пытаюсь показать столбец связанной таблицы с ng-repeat, но я не могу.

У меня 3 таблицы:

create_table "events", force: :cascade do |t|
t.string   "title"
t.text     "description"
t.time     "hour"
t.integer  "duration"
t.date     "date"
t.integer  "user_id"
t.datetime "created_at",       null: false
t.datetime "updated_at",       null: false
t.float    "latitude"
t.float    "longitude"
t.string   "formatted_addres"
t.integer  "location_id"
end

create_table "taggings", force: :cascade do |t|
t.integer  "event_id"
t.integer  "tag_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

add_index "taggings", ["event_id"], name: "index_taggings_on_event_id"
add_index "taggings", ["tag_id"], name: "index_taggings_on_tag_id"

create_table "tags", force: :cascade do |t|
t.string   "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

add_index "tags", ["name"], name: "index_tags_on_name"

и я использую ng-repeat, чтобы показать события

    controller code:    
    app.controller('eventController', ['$http', function($http){
                var store = this;
                store.events = [];

                $http.get('/events.json').success(function(data){
                    store.events = data;
            });
    }]);

    The html code:
    <section ng-repeat="event in eventShow.events | orderBy:'date'">
            <div class="panel panel-default single-event">
                <div class="panel-heading">
                    <h3>
                        {{event.title}}
                        <em class="pull-right">Created by user: {{event.user_id}}</em>
                    </h3>
                </div>
                <div class="panel-body">
                    Description:<br>{{event.description}} <br>
                    <em class="pull-right">{{event.date | date:'dd-MM-yyyy' }} - {{event.hour | date:"H:mm"}}</em> <br>
                    {{event.duration}} minutes <br>
            {{ event.tags }}
                </div>
            </div>
        </section>

Все работает, но когда я пытаюсь показать теги на ng-repeat, например {{event.tags.name}}, он ничего не показывает. В рельсах работает подобный синтаксис, но я вижу в угловом, что это нужно сделать по-другому. Я искал информацию об этом вчера и сегодня, и я ничего не нашел. Кто-нибудь может помочь? Благодарю!

Это данные моего контроллера:

  # GET /events
  # GET /events.json
  def index
    @events = Event.all
    binding.pry
    respond_to do |format|
      format.html { render :index }
      format.json { render json: @events }
    end
  end

Если я делаю binding.pry, я могу сделать @events.first.tags, и я вижу al-теги этого события, поэтому в ruby-коде я могу сделать

<ul>    
    <% @events.each do |event| %>
       <li><%= event.tags %></li>
    <% end %>
</ul>

И это то, что я не могу сделать с угловым {{event.tags}} ответ json, который я получаю от get/events.json, похож на этот

    [
  {
    "id": 18,
    "title": "awesome event",
    "description": "incredible description",
    "hour": "2000-01-01T11:12:00.000Z",
    "duration": 12,
    "date": "2015-11-25",
    "user_id": 1,
    "created_at": "2015-11-26T11:57:03.433Z",
    "updated_at": "2015-11-26T11:57:03.433Z",
    "latitude": 42.5767239,
    "longitude": 3.4435419,
    "formatted_addres": "somewhere",
    "location_id": null
  }
]

и если я использую отладчик, я вижу только поля, которые находятся в json с ng-repat. Но мне нужно перечислить элементы в столбце другой таблицы, как я делаю в рельсах.

Я использую:

  • Rails 4.2.5
  • Ruby 2.2.1p85 (версия 2015-02-26 49769)

пожалуйста, будьте терпеливы со мной.

  • 0
    Вы уверены, что в вашем ответе есть name поля в tags ?
  • 0
    В ruby я перечисляю связанные таблицы, выполняющие <ul> <% @events.eachevents.each do | event | %> <li> <% = event.tag.name%> </ li> <% end%> </ ul>, потому что событие связано с тегами с помощью тегов, поэтому я думаю, что в угловых должно быть похоже, но я вижу Я не могу сделать это под углом, и я не нахожу способ сделать это.
Показать ещё 2 комментария
Теги:
relationships

2 ответа

1
Лучший ответ

Попробуйте изменить код контроллера:

app.controller('eventController', ['$scope', '$http', function($scope, $http){

            $http.get('/events.json').success(function(data){
                $scope.events = data;
        });
}]);

Измените свой html с помощью области events

<section ng-repeat="event in events | orderBy:'date'">

для справки о $scope в angularjs


Обновить:

создать файл => app/views/events/index.json.jbuilder

json.array! @events do |event|
  json.(event, :id, :title, :description, :hour, :duration, :date, :user_id, :latitude, :longitude, :formatted_addres, :location_id)
  json.tags event.tags
end

# change in controller:

 def index
    @events = Event.all
    binding.pry
    respond_to do |format|
      format.html 
      format.json 
    end
  end
  • 0
    Я пробовал это, но я получаю "ReferenceError: $ scope не определен" в консоли. Я даже пытался внедрить его с помощью app.controller ('eventController', ['$ scope', '$ http', function ($ http) {...}, но все равно получаю ошибку
  • 0
    Я решил ошибку, я не включил $ scope в функцию (), теперь она работает отлично, но я все еще не могу перечислить столбец связанной таблицы с {{event.tags}}
Показать ещё 7 комментариев
0

Чтобы связать некоторую переменную в пользовательском интерфейсе, вам нужно сначала привязать ее к $scope. Поэтому попробуйте использовать $scope.store вместо var store.

Внедрить $scope в зависимости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню