2015-09-15 10 views
0

У меня есть сообщения и категории. Я сделал ассоциации между ними обоими, поэтому теперь я могу создать новый Post is Posts/new и выбрать категорию, которую я хочу, и отображать сообщения в категории/1/show. Я хочу, чтобы иметь возможность перейти в Категории/1 и создать новую должность с этой категорией, без необходимости выбирать категорию в форме.Ruby on Rails Database Association Форма

Может кто-нибудь мне помочь? Спасибо.

Модели:

Категория:

class Category < ActiveRecord::Base 
    has_many :places 
end 

Место:

class Place < ActiveRecord::Base 
    belongs_to :category 
end 

в Place # шоу у меня есть по этой ссылке:

<%= link_to 'Edit', edit_place_path(@place) %> 

В categories_controller:

def show 
    @category = Category.find(params[:id]) 
    @title = @category.name 
    @posts = @category.places 
    end 

В форме:

</div> 
    <div class="field"> 
    <%= f.label :category_id %><br> 
    <%= f.select :category_id, Category.all.collect {|p| [ p.name, p.id ] }, { include_blank: true } %> 
    </div> 
+1

Какую связь вы определяете между почтой и категорией? –

+1

По 'Категории/1' Я предполагаю, что вы имеете в виду' Категории /: id' и т. Д. Вы читали [Rails ActiveRecord Association] (http://guides.rubyonrails.org/association_basics.html)? Он описывает все имеющиеся в вашем распоряжении методы, которые вам нужно будет сделать. – lurker

+0

Когда вы говорите, что «хотите иметь возможность перейти в категории/1» - что конкретно означает это? Что такое код, который будет делать это? Каков текущий код для создания нового сообщения? – BryanH

ответ

2

Вы должны добавить новую ссылку в categories#show зрения:

<%= link_to 'Post to this Category', new_post_path(category_id: @category.id) %> 
#=> <a href="posts/new?category_id="2">Post to this Category</a> 

, а затем изменить свой posts#new метод:

def new 
    @post = Post.new 
    @post.category = Category.find(params[:category_id]) if params[:category_id].present? 
end 

Использование это у вас будет категория выбрана.

+0

Я бы рекомендовал вместо этого использовать параметр [вложенные ресурсы] (http://guides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects). Помощник пути будет выглядеть как 'new_category_post_path (@category)', а затем они могут избежать '@ post.category' в функции' new', потому что category_id уже будет доступен в 'POST', потому что он будет автоматически параметр в URL-адресе. Этот способ тоже будет работать, но его немного более многословный и менее «рельсы» -y. –

+1

Я пытаюсь с вложенными ресурсами. теперь я могу получить доступ к категориям/30/posts/new, но как я могу изменить форму, поэтому у нее есть только опция для категории 30? @PaulRichter –

Смежные вопросы