Ruby 我是否正确处理此Rails表单?

Ruby 我是否正确处理此Rails表单?,ruby,ruby-on-rails-3,forms,views,controllers,Ruby,Ruby On Rails 3,Forms,Views,Controllers,在我的关系中,我有以下几点: 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])

在我的关系中,我有以下几点:

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>

我有几个问题:

  • 这是处理rel_id和user_id的正确方法吗?我觉得有点笨重

  • 我无法将:类型保存到数据库,但其他所有操作都可以。我在服务器日志中发现以下内容:

  • 参数:{“utf8”=>“✓", "真实性令牌“=>”Z7R4TWSSVHZMFHFH8OCFYUEGZ2RWUXXETLKBR+cLfs=”,“类型”=>“0”,“提交”=>“创建关系”,“用户id”=>“7”}

    这对我来说很奇怪,因为它应该是储蓄型的

    3。。在
    行中使用@user\u id或@current user是否重要?为什么?

    1)
    @user\u id
    实际上被分配了一个
    user
    的实例,所以我称之为
    @user
    分配
    rel_id
    时,我认为您只需要用户id值(整数)。您可以这样做:

    @relationship.rel_id = params[:user_id]
    
    2)
    type
    字段用于带有ActiveRecord的STI表,如果您出于任何其他原因将字段命名为
    type
    ,则会发生不好的情况。尝试将其更改为另一个名称,如
    relationship\u type

    3) 可能,具体取决于应用程序的设置方式。@user(u id)和@current_uuser可能代表不同的用户。如果您只希望当前用户为自己创建关系,那么您可以只使用@current_user(在这种情况下可能不使用嵌套路由)。

    调用属性“type”在rails中是不允许的,因为它已经在继承自ActiveRecord::Base的类上定义了type方法。它用于单表继承

    最不痛苦的事情是将该列重命名为“relationship_type”或“kind”,但如果确实需要,您可以这样处理:

    @relationship = Relationship.new(params[:relationship])
    @relationship[:type] = params[:type]
    

    我选择了一条不那么痛苦的路线,但它仍然没有节约。我原以为它会抱怨:如果它在继承表单ActiveRecord时遇到问题,请键入before。
    @user
    @current\u user
    的好友。它们应该始终是不同的用户。我还没有把这个签入编码。我看了Railscast#139关于嵌套的评论,那里的建议让我认为嵌套是合适的。你有什么理由不这么认为吗?在这种情况下,嵌套资源就可以了。我只是有点不确定你想如何使用@user和current_user进行比较。current_user是一种确定谁登录的方法。因此,在这种情况下,当前用户已登录并正在与
    @user
    建立关系。这有意义吗?我相信这就是我的代码所做的,但无论出于什么原因,我仍然无法保存关系类型。