Правильно ли я обрабатываю эту форму Rails? - PullRequest
0 голосов
/ 29 октября 2011

В моем Relations_Controller у меня есть следующее:

class RelationshipsController < ApplicationController

  def new
    @user_id = User.find_by_id(params[:user_id])
    @relationship = Relationship.new
  end

  def create
    @relationship = Relationship.new(params[:relationship])
    @relationship.rel_id = User.find_by_id(params[:user_id])
    @relationship.user_id = current_user
    if @relationship.save
        redirect_to root_url, :notice => "Signed Up!"
    else
        render "new"
    end
  end
end

и по моему мнению:

<section id="main">
  <%= form_for [@user_id, @relationship]  do |f| %>
    <div class="field">
      <%= f.label :type %>
      <%= select_tag(:type, options_for_select([['Friend', 0], ['Family', 1],['Spouse', 2]])) %>
    </div>
   <div class="actions"><%= f.submit %></div>
  <% end %>
</section>

У меня есть несколько вопросов:

  1. Это правильный способ обработки rel_id и user_id? Это кажется мне неуклюжим.

  2. Я не могу получить тип: для сохранения в базе данных, но все остальное делает. В журналах сервера я нахожу следующее:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"z7R4tWSSVHZmFXfh8HocfyuegZ2rwuXXeTLKbR+cLfs=", "type"=>"0", "commit"=>"Create Relationship", "user_id"=>"7"}

, что мне кажется странным, потому что это должен быть тип сохранения.

3 .. Имеет ли значение, если я использую @user_id или @current user в строке <%= form_for [@user_id, @relationship] do |f| %>? Почему?

Ответы [ 2 ]

1 голос
/ 29 октября 2011

Вызов атрибута «тип» в rails запрещен, поскольку он уже определяет метод типа в ваших классах, которые наследуются от ActiveRecord :: Base.Он используется для наследования одной таблицы.

Наименее болезненно было бы переименовать этот столбец в "Relationship Type" или "kind", но вы можете обойти его следующим образом, если вам действительно нужно:

@relationship = Relationship.new(params[:relationship])
@relationship[:type] = params[:type]
1 голос
/ 29 октября 2011

1) @user_id фактически назначается экземпляр User, поэтому я бы назвал его @user при назначении rel_id Я думаю, вам просто нужно значение идентификатора пользователя (целое число).Вероятно, вы можете просто сделать это:

@relationship.rel_id = params[:user_id]

2) type поля используются для таблиц STI с ActiveRecord, и плохие вещи случаются, если вы назвали свое поле type по любой другой причине.Попробуйте изменить его на другое имя, например relationship_type

3) Возможно, в зависимости от того, как настроено ваше приложение.Возможно, что @user (_id) и @current_user представляют разных пользователей.Если вы хотите, чтобы текущий пользователь только создавал отношения для себя, то вы можете просто использовать @current_user (и, возможно, не использовать вложенные маршруты в этом случае).

...