получить атрибуты от родительских объектов в рельсах 3.1 - PullRequest
0 голосов
/ 23 января 2012

У меня есть три модели:

category.rb

class Category
  include Mongoid::Document

  # Relationships
  has_many :posts, :autosave => true
  has_many :boards, :autosave => true
  accepts_nested_attributes_for :boards
  accepts_nested_attributes_for :posts


  #fields
  field :name

  #attr
  attr_accessible :name
end

Моя модель board.rb

class Board
 include Mongoid::Document

 # Relationships
  has_many :posts, :dependent => :destroy , :autosave => true
  accepts_nested_attributes_for :posts
  belongs_to :category

  #fields
  field :name
  field :description

  #attr
  attr_accessible :name, :posts_attributes, :description, :category_id

end

My post.rb

class Post
 include Mongoid::Document

 # Relationships
 belongs_to :board
 belongs_to :category
 belongs_to :user

 #fields  
 field :content

 #attr
 attr_accessible :content :board_id, :category_id

end

В моем posts_controller

def create

   @post = current_user.posts.new(params[:post])
   @board = @post.board
   @board.user = current_user

 if @board.category_id? 
  @post.category_id = @board.category_id
 end

  respond_to do |format|
   if @post.save
     format.html { redirect_to root_url, notice: 'Post was successfully created.' }
     format.json { render json: root_url, status: :created, location: @post }
   else
     format.html { render action: "new" }
     format.json { render json: @post.errors, status: :unprocessable_entity }
   end
 end

end

На мой взгляд, новое действие:

<%= form_for(@post) do |f| %>
 <%= f.text_area :content %>
 <%= f.collection_select :board_id, Board.where(:user_id => current_user.id), :id, :name%>
 <%= f.submit :id => "button_submit_pin_edit" %>
<% end %>

Доски в поле выбора могут иметь или не иметь родительскую категорию, уже назначенную.

Я хочу получитьатрибуты из категории (название категории для этого события) в моем виде поста без использования поля выбора или поля ввода.

с этим кодомв posts.controller.rb

if @board.category_id? 
  @post.category_id = @board.category_id
 end

Я вижу в консоли для Post.first ej:

<Post _id: 4f1d96241d41c8280800007c, _type: nil, created_at: 2012-01-23 17:17:24 UTC, user_id: BSON::ObjectId('4f0b19691d41c80d08002b20'), board_id: BSON::ObjectId('4f1455fa1d41c83988000510'), category_id: BSON::ObjectId('4f1c2d811d41c8548e000008'), content: "nuevo post"> 

Если я пишу:

post = Post.first

и

post.board

Я получаю объектплата в порядке.Это работает нормально.

, но если я напишу:

post.category

Я получу:

=> nil

Я пытаюсь просмотреть новое сообщение добавить скрытое поле:

hidden_field(:category, :name)

Как получить параметры категории объекта?Благодаря

1 Ответ

0 голосов
/ 23 января 2012

Не устанавливайте его, используя поля ID.Вместо этого в вашем PostsController:

if @board.category_id? 
  @post.category_id = @board.category_id
end

Попробуйте эту строку:

@post.category = @board.category

, которая установит отношение @ post.category belongs_to для указания на @board.category, если оно существует(не ноль).Mongoid позаботится о настройке поля category_id. Прочитайте документацию mongoid о связях для более подробного объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...