In my relationships_controller I have the following:
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
and in my views I have:
<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>
I have a few questions:
-
Is this the correct way to handle the rel_id and the user_id? It seems kinda clunky to me.
-
I can’t get the :type to save to the database, but everything else does. I find the following in my server logs:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"z7R4tWSSVHZmFXfh8HocfyuegZ2rwuXXeTLKbR+cLfs=", "type"=>"0", "commit"=>"Create Relationship", "user_id"=>"7"}
which seems odd to me because it should be saving type.
3.. Does it matter if I use @user_id or @current user in the <%= form_for [@user_id, @relationship] do |f| %> line? Why?
1)
@user_idis actually assigned an instance ofUser, so I would call it@userwhen assigning
rel_idI think you just need the user id value (integer). You can probably just do this:2)
typefields are used for STI tables with ActiveRecord, and bad things happen if you name your fieldtypefor any other reason. Try changing it to another name likerelationship_type3) Possible, depending on how your app is set up. It’s possible that @user(_id) and @current_user represent different users. If you only want the current user to create a relationship for himself/herself, then you can just use @current_user (and maybe not use nested routes in that case).