<% if current_user.blank? %>
<%tripowner=User.find_by_id(@trip.userid).id%>
<%=tripowner%>
<h3 class="text-center">Please sign up to provide recommendations.</h3>
<%= form_tag usersback_url, class: "form-signin", method: 'post' do %>
<h2 class="form-signin-heading">SIGN UP</h2>
<div>
<%= text_field_tag :first_name, nil, class: "input-block-level", placeholder: "First" %>
</div>
<div>
<%= text_field_tag :last_name, nil, class: "input-block-level", placeholder: "Last" %>
</div>
<div>
<%= email_field_tag :email, nil, class: "input-block-level", placeholder: "Email address" %>
</div>
<div>
<%= password_field_tag :password, nil, class: "input-block-level", placeholder: "Password" %>
</div>
<div>
<%= password_field_tag :password_confirmation, nil, class: "input-block-level", placeholder: "Confirm Password" %>
</div>
<%= hidden_field_tag :tripowner, value: tripowner %>
<div>
<%= submit_tag "SIGN UP", :class => 'btn btn-large btn-success' %>
</div>
<% end %>
<%end%>
:tripowner
没有正确地通过params,但是返回nil。我试图在行动中用它来做这件事。我已经确认tripowner
收益率为1.因此,我希望@friendship.f2
为1.是否有理由将其返回为零?
def createback
@user = User.new
@user.first_name = params[:first_name]
@user.last_name = params[:last_name]
@user.email = params[:email]
@user.password = params[:password]
@user.password_confirmation = params[:password_confirmation]
@friendship = Friend.new
@friendship.f2 = params[:tripowner]
if @user.save
@friendship.f1 = @user.id
@friendship.confirmed = true
@friendship.save
reset_session
session[:user_id] = @user.id
redirect_to :back, notice: "Signed up successfully."
else
render 'new'
end
端
朋友模特
class Friend < ActiveRecord::Base
belongs_to :user
end
参数:参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“BkVY0 / z0KeCQRg83wvumUKEmT67R4liMZr33u98mTBE =”,“first_name”=&gt;“rki”,“last_name”=&gt;“rki” ,“email”=&gt;“test @ k”,“password”=&gt;“[FILTERED]”,“password_confirmation”=&gt;“[FILTERED]”,“tripowner”=&gt;“{:value =&gt; 1}“,”“提交”=&gt;“注册”}
正如您所看到的,1正在三重奏中正确传递。
答案 0 :(得分:0)
试试这个:
<%= hidden_field_tag :tripowner, value: tripowner %>
我认为你应该使用tripowner_id
而不是tripowner
来跟踪Rails的约定,所以它可以是这样的:
<%= hidden_field_tag :tripowner, value: User.find_by_id(@trip.userid).id %>
答案 1 :(得分:0)
您应该设置关联,以便您可以通过关联访问旅行所有者,而不必为其运行单独的查询。
在这种情况下,旅行应属于用户,并且用户应该有多次旅行......
Trip.rb # model
belongs_to :user
User.rb # model
has_many :trips
有了这个,您可以通过以下方式访问旅行老板:
@trip.user.id
假设您在@trip上进行操作,您甚至不需要通过隐藏字段传递任何内容。否则指定类似的东西应该有效:
<%= hidden_field_tag :tripowner, @trip.user.id %>
==更新
使用您发布的新代码,您应该使用form_for @user ...这将使用user:{attributes}正确命名表单中的所有属性。有了这个而不是单独分配您的模型属性,您可以在控制器操作中执行以下操作:
@user = User.new(params[:user])
如果您深入了解日志并粘贴发送到控制器操作的params散列,也会有所帮助。如果你在本地运行它,它将在log / development.log中。
==第二次更新
首先检查以确保发送到控制器的params散列看起来是正确的。如果是这样,它可能是您的友谊模型的问题。
hidden_field_tag上的文档: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-hidden_field_tag