title: Rails: POST 422 (Unprocessable Entity) in Rails? Due to the routes or the controller?
body: <p>I'm trying to give users on my website "points" or "credits" for tweeting about out the brand name.</p>
  
  <p>I have the fancy twitter widget on the appropriate view...</p>
  
  <pre><code>&lt;p&gt;&lt;a  href="https://twitter.com/share" class="twitter-share-button" data-text="Check Out This Awesome Website Yay" data-via="BrandName" data-hashtags="ProductName"&gt;Tweet&lt;/a&gt;
  &lt;div id="credited"&gt;&lt;/div&gt;
  &lt;script&gt;window.twttr = (function (d, s, id) {
    var t, js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src= "https://platform.twitter.com/widgets.js";
    fjs.parentNode.insertBefore(js, fjs);
    return window.twttr || (t = { _e: [], ready: function (f) { t._e.push(f) } });
  }(document, "script", "twitter-wjs"));
  &lt;/script&gt;    
  </code></pre>
  
  <p>I have the JS all written up and pretty....</p>
  
  <pre><code>function creditTweet() {
    $.post(
      "/credit_tweet",
      {},
      function(result) {
        var text;
        if (result.status === "noop") {
          text = "Thanks for sharing already!";
        } else if (result.status === "ok") {
          text = "5 Kredit Added";
        }
        $("#credited").html(text);
      }
    );
  }
  
  $(function() {
    twttr.ready(function (twttr) {
      window.twttr.events.bind('tweet', creditTweet);
    }); 
  });
  </code></pre>
  
  <p>Now the problem is either in the controller OR in the routes (where I'm posting). I think the routes are fine because the POST is almost working, because this is the description of the error on wikipedia - "422 Unprocessable Entity (WebDAV; RFC 4918)
  The request was well-formed but was unable to be followed due to semantic errors."</p>
  
  <p>So, do you guys see anything wrong with my ruby code in the controller?</p>
  
  <pre><code>class SocialKreditController &lt; ApplicationController
      TWEET_CREDIT_AMOUNT = 5
  
    def credit_tweet
      if !signed_in?
        render json: { status: :error }
      elsif   current_user.tweet_credited
          Rails.logger.info "Not crediting #{ current_user.id }"
          render json: { status: :noop }
        else
          Rails.logger.info "Crediting #{ current_user.id }"
          current_user.update_attributes tweet_credited: true
          current_user.add_points TWEET_CREDIT_AMOUNT
          render json: { status: :ok }
        end
    end
  end
  </code></pre>
  
  <p>And in my routes.rb, it's pretty straight forward, so I doubt there's anything wrong here...</p>
  
  <pre><code>  get 'social_kredit/credit_tweet'
    post '/credit_tweet' =&gt; 'social_kredit#credit_tweet'
  </code></pre>
  
  <p>Where oh where is this error? I clearly don't know smack about HTTP requests.</p>