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

时间:2013-06-14 17:06:32

标签: ruby-on-rails ruby-on-rails-3

User has_one UserProfileUserProfile有一列名为message

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

当您看到我的查看时,按message_update按钮后,可以通过后台访问Update。 在控制器中,如何接收输入数据,并将其保存到message表的user_profile列?

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

我想我差不多了:) 谁能告诉我如何编码呢? 谢谢!

Contorller

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

现在,这是路由错误:(

ActionController::RoutingError (No route matches [PUT] "/message_update"):

3 个答案:

答案 0 :(得分:1)

将路线更改为

put 'message_update' => 'users#message_update'

解释

您尝试更新现有用户(因为它是current_user),因此您应该使用为更新对象而保留的HTTP PUT谓词。 在Rails 4中你也可以写

patch 'message_update' => 'users#message_update'

但它只是语法糖(put的别名)

此外,您的控制器出错。由于您只想保存一个字段值,我建议您编写

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

答案 1 :(得分:0)

更改此

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

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

答案 2 :(得分:0)

您将路线指定为获取请求。将其更改为:

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