Rails: создание модели has_one в представлении родительской модели? - PullRequest
1 голос
/ 07 сентября 2011

У меня есть две модели, Персонаж и Фон. У персонажа есть фон_, а фон принадлежит персонажу. У меня есть частичная настройка _menu для отображения в моем режиме Персонажа, чтобы пользователи могли просматривать другие модели, связанные с Персонажем, такие как Предметы и Заклинания.

Тем не менее, у персонажа есть отношение has_many с этими другими моделями, и я не могу понять, как правильно связать модель с отношением has_one.

Вот метод добавления новой страницы со страницы просмотра моего персонажа для модели has_many:

<%= link_to 'Items Page', character_items_path(@character) unless @character.items.exists? %>

А вот код из частичного меню, который будет ссылаться на страницу после создания страницы:

<%= link_to 'Items', character_items_path(@character) if @character.items.exists? %>

И код из моего контроллера Backgrounds:

def new
  @character = Character.find(params[:character_id])
  @background = @character.build_background(params[:background])
end

def create
  @character = Character.find(params[:character_id])
  @background = @character.create_background(params[:background])
   if @background.save
 redirect_to character_path(@character), :notice => "Background information successfully created!"
   else
 render :action => "new"
 end
end

Любой совет? По сути, я хочу, чтобы ссылка_ создала новую фоновую страницу на странице показа символов, а затем чтобы этот фон отображался в частичном меню после его создания, чтобы его можно было просматривать и редактировать, когда пользователь нажимает на ссылку.

Я попытался написать код так:

<%= link_to 'Background', character_background_path(@character) if @character.background.exists? %>

Но тогда Rails жалуется, что .exist? это неопределенный метод. Я предполагаю, что .exists не работает для отношения has_one, иначе я использую его некорректно. Спасибо за любой вклад!

1 Ответ

2 голосов
/ 07 сентября 2011

вы должны попробовать if @character.background.Возвращает ноль, если фон не найден (см. http://guides.rubyonrails.org/association_basics.html#has_one-association-reference)

...