Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在不加载任何页面的情况下传递输入数据(字符串)并保存?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何在不加载任何页面的情况下传递输入数据(字符串)并保存?

Ruby on rails 如何在不加载任何页面的情况下传递输入数据(字符串)并保存?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,User有一个UserProfile,UserProfile有一个名为message 在这里,我想保存消息字段的输入数据,而不加载任何页面 正如您看到的我的视图,当我按下更新按钮时,它可以通过后台输入访问消息更新。 在控制器中,如何接收输入数据,并将其保存到用户配置文件表的消息列 我不知道如何在控制器中编码:( 我想我快到了:) 有人能告诉我怎么编码吗? 谢谢 控制器 def message_update current_user.save if request.xhr?

User
有一个
UserProfile
UserProfile
有一个名为
message

在这里,我想保存
消息
字段的输入数据,而不加载任何页面

正如您看到的我的视图,当我按下
更新
按钮时,它可以通过后台输入访问
消息更新

控制器中,如何接收输入数据,并将其保存到
用户配置文件
表的
消息

我不知道如何在控制器中编码:(

我想我快到了:) 有人能告诉我怎么编码吗? 谢谢

控制器

def message_update

    current_user.save

    if request.xhr?  # ajax request
        respond_to do |format|
            format.js {render :action=>"message_update.js"}
        end
    else
        redirect_to users_path
    end


end
查看

    <%= form_for(current_user, :url => {:controller => "users", :action => "message_update" }, :remote => true, :class => 'form-search') do |f| %>
        <%= f.fields_for :user_profile do |profile_form| %>
            <div class="input-append">
                <%= profile_form.text_field :message, :class => 'span6' %>
                <button type="submit" class="btn">Update</button>
            </div>
        <% end %>
    <% end %>
现在,这是路由错误:(

改变这个

get 'message_update' => 'users#message_update', :via => :put

改变这个

get 'message_update' => 'users#message_update', :via => :put


您正在将路由指定为get请求。请将其更改为:


匹配'message_update'=>'用户#message_update',:via=>:put

您正在将路由指定为get请求。将其更改为:

匹配'message_update'=>'用户#message_update',:via=>:put

将路由更改为

put 'message_update' => 'users#message_update'
解释

您正在尝试更新现有用户(因为它是当前用户),所以应该使用保留用于更新对象的HTTP PUT谓词。 在Rails 4中,您还可以编写

patch 'message_update' => 'users#message_update'
但它只是语法上的糖(put的别名)

另外,您的控制器中有一个错误。因为您只想保存一个字段值,所以我建议您编写

current_user.user_profile.update_attribute :message, params['user']['user_profile_attributes']['message']
将路由更改为

put 'message_update' => 'users#message_update'
解释

您正在尝试更新现有用户(因为它是当前用户),所以应该使用保留用于更新对象的HTTP PUT谓词。 在Rails 4中,您还可以编写

patch 'message_update' => 'users#message_update'
但它只是语法上的糖(put的别名)

另外,您的控制器中有一个错误。因为您只想保存一个字段值,所以我建议您编写

current_user.user_profile.update_attribute :message, params['user']['user_profile_attributes']['message']

谢谢,现在没有路由错误,但它仍然不会保存输入数据:(谢谢,现在没有路由错误,但它仍然不会保存输入数据:(谢谢,现在没有路由错误,但它仍然不会保存输入数据:(好的,我在输入字段
message
中键入“aaaaaa”并按下按钮。然后我再次加载页面。它显示默认字符串:(谢谢,现在没有路由错误,但它仍然不会保存输入数据:(好的,我在输入字段
消息
中键入“aaaaaa”并按下按钮。然后我再次加载页面。它显示默认字符串:(它仍然不会保存输入数据:(我可能对params键有错误,但您可以在日志中看到它应该是什么。感谢它返回了这个错误
NoMethodError(对于nil:NilClass,未定义的方法
[]):`log说这个
“user”=>{“user\u profile\u attributes”=>{“message”=>“test”,“id”=>“1}
它使用了这个
当前用户.user\u配置文件.update\u属性:message,params['user']['user\u profile\u attributes']['message']
!!!为什么不使用user\u配置文件???它仍然不会保存输入数据:(我可能对params键有错误,但您可以在日志中看到它应该是什么。感谢它返回了这个错误
NoMethodError(对于nil:NilClass,未定义的方法是:`log说这个
“user”=>{“user\u profile\u attributes”=>{“message”=>“test”,“id”=>“1”}
它使用了这个
当前的user.user\u profile.update\u attribute:message,params['user']['user\u profile\u attributes']['message']
!为什么不使用user\u profile????