1

Userhas_one UserProfile,并且UserProfile有一个名为message

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

如您所见,当我按下按钮时,它会message_update通过放入后台访问。 在Controller中,如何接收输入数据,并将其保存到表格的列中?Update
messageuser_profile

我不知道如何在Controller中编写代码:(

我想我快到了:) 谁能告诉我如何编码?谢谢!

控制器

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"):
4

3 回答 3

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']
于 2013-06-14T18:15:09.097 回答
0

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

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

于 2013-06-14T17:28:45.417 回答
0

改变这个

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

match 'message_update' => 'users#message_update', :via => :put
于 2013-06-14T17:28:03.183 回答