Я пытаюсь показать столбец связанной таблицы с 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. Но мне нужно перечислить элементы в столбце другой таблицы, как я делаю в рельсах.
Я использую:
пожалуйста, будьте терпеливы со мной.
Попробуйте изменить код контроллера:
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
Чтобы связать некоторую переменную в пользовательском интерфейсе, вам нужно сначала привязать ее к $scope
. Поэтому попробуйте использовать $scope.store
вместо var store.
Внедрить
$scope
в зависимости.
name
поля вtags
?