在我的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>
我有几个问题:
这是处理rel_id和user_id的正确方法吗?对我来说似乎有点笨拙。
我无法获取:type保存到数据库,但其他一切都是。我在服务器日志中找到以下内容:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"z7R4tWSSVHZmFXfh8HocfyuegZ2rwuXXeTLKbR+cLfs=", "type"=>"0", "commit"=>"Create Relationship", "user_id"=>"7"}
这对我来说很奇怪,因为它应该是保存类型。
3 ..如果我在<%= form_for [@user_id, @relationship] do |f| %>
行使用@user_id或@current用户,这有关系吗?为什么呢?
答案 0 :(得分:1)
1)@user_id
实际上已分配了User
的实例,因此我将其称为@user
在分配rel_id
时,我认为您只需要用户ID值(整数)。您可以这样做:
@relationship.rel_id = params[:user_id]
2)type
字段用于带有ActiveRecord的STI表,如果您因任何其他原因命名字段type
,则会发生错误。尝试将其更改为其他名称,例如relationship_type
3)可能,具体取决于您的应用的设置方式。 @user(_id)和@current_user可能代表不同的用户。如果您只希望当前用户为自己创建关系,那么您可以使用@current_user(在这种情况下可能不使用嵌套路由)。
答案 1 :(得分:1)
调用属性“type”在rails中是禁止的,因为它已经在类上定义了从ActiveRecord :: Base继承的类型方法。它用于单表继承。
最不痛苦的事情是将该列重命名为“relationship_type”或“kind”,但如果您确实需要,可以像这样绕过它:
@relationship = Relationship.new(params[:relationship])
@relationship[:type] = params[:type]