1
<% 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未正确通过参数,但返回 nil。我正试图在行动中做到这一点。我已经确认tripowner收益率为 1。因此,我想@friendship.f2成为 1。它在下面返回 nil 是否有原因?

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

params: 参数:{"utf8"=>"✓", "authenticity_token"=>"BkVY0/z0KeCQRg83wvumUKEmT67R4liMZr33u98mTBE=", "first_name"=>"rki", "last_name"=>"rki", "email"=>" test@k", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "tripowner"=>"{:value=>1}", "commit"=>"注册"}

如您所见, 1 在tripowner 中被正确传递。

4

2 回答 2

0

试试这个:

<%= hidden_field_tag :tripowner, value: tripowner %>

我认为你应该使用tripowner_id而不是tripowner仅仅遵循 Rails 的约定,所以它可以是:

<%= hidden_field_tag :tripowner, value: User.find_by_id(@trip.userid).id %>
于 2013-08-17T17:36:48.003 回答
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])

如果您深入了解日志并将发送到控制器操作的参数哈希粘贴到您的控制器操作中,这也会很有帮助。如果您在本地运行它,它将位于 log/development.log 中。

== 第二次更新

首先检查以确保发送到控制器的参数哈希看起来正确。如果是这样,则可能是您的友谊模型存在问题。

hidden_​​field_tag 上的文档: http ://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-hidden_​​field_tag

于 2013-08-17T18:31:19.627 回答