Я новичок в Rails и пытаюсь создать API для мобильного приложения.Хотя Api будет генерировать ответы JSON, мне также нужен веб-интерфейс для создания данных.Мои маршруты выглядят так:
Appone::Application.routes.draw do
namespace :api1 do
resources :reldates do
resources :movies
end
end
end
Модель release_date:
class Api1::Reldate
include Mongoid::Document
include Mongoid::MultiParameterAttributes
include Mongoid::Timestamps
field :release_date, :type => Date
embeds_many :api1_movies
validates_associated :movie
accepts_nested_attributes_for :movie
end
Модель фильма:
class Api1::Movie
include Mongoid::Document
include Mongoid::MultiParameterAttributes
include Mongoid::Timestamps
field :title, :type => String
field :release_type, :type => String
field :release_number, :type => Integer
embedded_in :api1_reldate, :inverse_of => :api1_movies
end
и новый show.html.erb:
<p id="notice"><%= notice %></p>
<p>
<b>Release date:</b>
<%= @api1_reldate.release_date %>
</p>
<% if @api1_reldate.api1_movies.size > 0 %>
<h2>Movies</h2>
<% for api1_movie in @api1_reldate.api1_movies %>
<h3><%= api1_movie.title %></h3>
<p><%= api1_movie.release_type %></p>
<p><%= api1_movie.release_number %></p>
<% end %>
<% end %>
<h2>New Movies</h2>
<% form_for([:api1], :url => { :action => :create ,:id => @reldate.movie}) do |form| %>
<p><%= f.label :title %> <%= f.text_field :title %></p>
<p><%= f.label :release_type %> <%= f.text_field :release_type %></p>
<p><%= f.label :release_number %> <%= f.number_field :release_number %></p>
<p><%= f.submit %></p>
<% end %>
<%= link_to 'Edit', edit_api1_reldate_path(@api1_reldate) %> |
<%= link_to 'Back', api1_reldates_path %>
Я не могу заставить это работать.Я могу заставить страницу обновлений работать, но после того, как я нажимаю на кнопку «Отправить», я получаю сообщение об ошибке:
undefined method `movie' for nil:NilClass
Extracted source (around line #18):
15: <% end %>
16:
17: <h2>New Movies</h2>
18: <% form_for([:api1], :url => { :action => :create ,:id => @reldate.movie}) do |form| %>
19: <p><%= f.label :title %> <%= f.text_field :title %></p>
20: <p><%= f.label :release_type %> <%= f.text_field :release_type %></p>
21: <p><%= f.label :release_number %> <%= f.number_field :release_number %></p>
Контроллер фильма выглядит следующим образом:
class Api1::MoviesController < ApplicationController
def create
@api1_reldate = Api1::Reldate.find(params[:api1_reldate_id])
@api1_movie = @api1_reldate.api1_movies.create!(params[:api1_movie])
redirect_to @api1_reldate, :notice => "Movie successfully created!"
end
end
Как мне получитьэто на работу?Я перепробовал все возможные варианты решения, но он не работает.Также я пользуюсь Райаном Бейтсом Railcast
Заранее спасибо.